精华内容
下载资源
问答
  • 原码将一个整数转换成二进制形式,就是其原码。例如short a=10, a的原码就是 0000 0000 0000 1010;更改a的值a=-10,此时a的原码...负数的反码是将原码除 符号位 以外的所有位(数值位)取反,0变成1,1变成0。例...

    原码

    将一个整数转换成二进制形式,就是其原码。例如short a=10, a的原码就是 0000 0000 0000 1010;更改a的值a=-10,此时a的原码就是1000 0000 0000 1010

    总结:原码就是一个整数本来的二进制形式

    反码

    正数和负数的反码不一样

    正数的反码就是其原码(原码和反码相同);负数的反码是将原码除 符号位 以外的所有位(数值位)取反,把0变成1,1变成0。

    例如short a=10, a的原码和反码都是0000 0000 0000 1010 ; 更改a的值a=-10,此时a的原码就是1111 1111 1111 0101

    补码

    补码的正数和负数的也不一样。

    对于正数,它的补码就是其原码(正数三码合一);负数的补码就是其反码加1。

    例如 short a=10, a 的原码、反码、补码都是 0000 0000 0000 1010; 更改a的值a=-10,此时a的补码就是 1111 1111 1111 0110

    补码是在反码的基础上打了一个补丁,进行了一下修正,所以叫'补码'。

    重点: 在计算机内存中,整数一律采用补码的形式来存储。这意味着当读取整数时还要采用逆向的转换,也就是将补码转换为原码

    小结一下:

    1、正数的原码、反码和补码都是其本身的二进制

    2、负数的反码将原码除 符号位 以外的所有位(数值位)取反,把0变成1,1变成0。补码就是其反码加1。

    3610b8f2b7ecbb49836c5883e52a38a3.png

    看到这里是不是有疑问?反码和补码是用来干嘛的?

    别急,且让我先做几道题。

    假设6和20都是short 类型的,现在我们要计算 6-18的结果,根据运算规则,它等价于6+(-18)。

    如果采用原码计算,那么运算过程为

    6-18=6+(-18)
    = [0000 0000 0000 0110](原) + [1000 0000 0001 0010](原)
    = [1000 0000 0001 1000](原)
    =-24

    直接用原码表示整数,让符号位也参与运算,结果显然是不正确的。

    于是又开始了探索,不断试错,后来设计出反码。下面来演示反码的运算过程。

    6-18=6+(-18)
    = [0000 0000 0000 0110](原) + [1000 0000 0001 0010](原)
    = [0000 0000 0000 0110](反) + [1111 1111 1110 1101](反)
    = [1111 1111 1111 0011](反)
    = [1000 0000 0000 1100](原)
    = -12

    计算结果是不是就正确了?这里不妨再思考一下,如果用反码就解决了,那补码为什么还要被设计?什么场景下会需要用到补码?下面我们再来看个栗子。

    18-6=18+(-6)
    = [0000 0000 0000 0001 0010](反)+[1111 1111 1111 1001](反)
    = [1 0000 0000 0000 1011](反)
    = [0000 0000 0000 1011](反)
    = [0000 0000 0000 1011](原)
    = 11

    最前面那个1在加法运算的过程中进位了,内存溢出被截掉了

    真实结果不应该是12吗?怎么通过反码计算的结果是11???

    6-18的结果正确,18-6的结果就相差1。是不是按照反码来计算,是不是小的数减去大的数不正确, 大的数减去小的数就不对了?

    你们可以按照上面的例子算一下, 然后你们就能发现,大的数减去小的数结果始终相差1。

    相差的这个1要进行纠正,但是又不能影响小的数减去大的数的结果,怎么办呢? 聪明的你现在脑海里应该已经想起了我们今天要讲的另外一个主角“补码”。

    下面我们来演示一下补码的计算过程:

    6-18=6+(18)
    = [0000 0000 0000 0110](补) + [1111 1111 1110 1110](补)
    = [1111 1111 1111 0100](补)
    = [1111 1111 1111 0011](反)
    = [1000 0000 0000 1100](原)
    = -12


    18-6=18+(-6)
    = [0000 0000 0001 0010](补) + [1111 1111 1111 1010](补)
    = [1 0000 0000 0000 1100](补)
    = [0000 0000 0000 1100](补)
    = [0000 0000 0000 1100](反)
    = [0000 0000 0000 1100](原)
    =12

    惊不惊喜?意不意外?

    采用补码的形式正好把相差的1纠正过来,也没有影响小的数减去大的数。

    展开全文
  • 数值为0或者字符串不是一个合法的数值则返回0 输入描述: 输入一个字符串,包括数字字母符号,可以为空 输出描述: 如果是合法的数值表达则返回该数字,否则返回0 这题是真的坑,目前的数据集明显有问题,用C++...

    题目描述

    将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0

    输入描述:

    输入一个字符串,包括数字字母符号,可以为空

    输出描述:

    如果是合法的数值表达则返回该数字,否则返回0

    这题是真的坑,目前的数据集明显有问题,用C++怎么判断都没没发AC。后来看评论区才发现python可以处理那个超过边界的数据。

    # -*- coding:utf-8 -*-
    class Solution:
        def StrToInt(self, s):
            # write code here
            if s=='':
                return 0;
            numlist = ['0','1','2','3','4','5','6','7','8','9']
            res = 0
            index = 1 #遍历字符串时的索引
            flag = 1 #符号位flag=1 默认为正数
            if s[0] == '-': flag = -1
            elif s[0] != '+': index = 0 
            for c in s[index:]:
                if c in numlist:
                    res = res*10+numlist.index(c)
                else:
                    res = 0
                    break
            return flag*res

    以上是可以AC的Python代码。

    class Solution {
    public:
       unsigned long int StrToInt(string str) 
        {
            int n = str.size();
            if (!n) return 0;
            if ((n == 1) && (str[0] == '-' || str[0] == '+'))
                return 0;
            int symbol = 1;
            unsigned long long res = 0;
            if (str[0] == '-')symbol = -1;
            for (int i = (str[0] == '-' || str[0] == '+') ? 1 : 0; i < n; i++)
            {
                if (str[i] > '9' || str[i] < '0') return 0;
                res = (res << 1) + (res << 3) + (str[i] & 0xf);
                if((res>0x7fffffffff)|| (res < (signed int)0x8000000000 && symbol==-1))
                    return 0;
            }
            return res*symbol;
        }
    };

    C++代码的通过率是85%,有个特例通不过,-2147483649,明明超过long 表示的范围了,有点坑。

    展开全文
  • 字符串转换成整数

    2020-07-03 15:27:55
    数值为0或者字符串不是一个合法的数值则返回0 输入描述: 输入一个字符串,包括数字字母符号,可以为空 输出描述: 如果是合法的数值表达则返回该数字,否则返回0 题目分析 将字符串转化为数组 第一个元素是否为“+” ...

    题目描述

    链接:题目传送门
    来源:牛客网

    将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0

    输入描述:
    输入一个字符串,包括数字字母符号,可以为空

    输出描述:
    如果是合法的数值表达则返回该数字,否则返回0

    题目分析

    • 将字符串转化为数组
    • 第一个元素是否为“+” / “-” 正负号与正常数字的区别处理
    • 第一个字母是否为0
    • 通过字符数组怎么样判断是否合法并转换为int数组
    • 由字符串转换后的数字是否发生溢出

    解题代码

    public static int StrToInt(String str) {
            if (str.isEmpty())
                return 0;
            //判断字符串中是否只有+/-
            if (str.equals("+")||str.equals("-"))
                return 0;
            int flag=0;
            //字符串转化为字符数组
            char[] chars = str.toCharArray();
            //创建相同长度的数组存储数字
            int[] tmp = new int[chars.length];
            //判断第一个字符是否为+/-,如果为则房子tmp中下标为0的位置,并且将
            //flag置为1.通过此方法进行动态判断第一个字母。
            if(chars[0]=='+'||chars[0]=='-'){
                tmp[0]=chars[0];
                flag=1;
            }
            //判断字符数组是否为0-9,并转换为数组存入tmp中
            for (int i = flag; i < chars.length; i++) {
                int a = (int)chars[i];
                if (a >= 48 && a <= 57)
                {
                    int b = (int) chars[i];
                    tmp[i] =b-48;
                }
                else
                    return 0;
            }
           //对数组数组进行重组为数字
            int s=tmp[flag];
            for (int i = flag+1; i <tmp.length ; i++) {
                s=s*10+tmp[i];
            }
            //通过第一个字符的类型判断输出结果
            if(tmp[0]=='+')
                return s;
            else if(tmp[0]=='-')
                return -s;
            else
                return s;
        }
    
    此解法中没有溢出情况的判断,提供两个关于本题的溢出判断思路
    • 通过数字数组与最后结果的进行比对判断,如果溢出两者每位上的数组不会相同
    • 在程序中使用long类型,判断之后转化为int
    • 正常的溢出判断方法后续学会补充
    展开全文
  • 数值为0或者字符串不是一个合法输入的数值则返回0 思路: 需要注意的点: 1.只输入一个符号时怎么处理 2.输入不是数字的其他符号类型时 3.输入的字符串大于整型范围时,考虑溢出 3.空串或者长度为0时 字符...

    题目:把字符串转换成整数

    要求不能使用字符串转整数的库函数。数值为0或者字符串不是一个合法输入的数值则返回0

    思路:
    需要注意的点:
    1.只输入一个符号时怎么处理
    2.输入不是数字的其他符号类型时
    3.输入的字符串大于整型范围时,考虑溢出
    3.空串或者长度为0时

    • 字符’0’对应的ASCII码值是48(转化为int类型);
    • 字符’9’对应的ASCII码值是57 (48+10-1=57);
    package jianZhiOffer;
    /*
     * 把字符串转换成整数
     * 要求不能使用字符串转整数的库函数。数值为0或者字符串不是一个合法输入的数值则返回0
     */
    public class Demo67 {
    
    	public static void main(String[] args) {
    		System.out.println(parseStringToInt("-"));
    		System.out.println(parseStringToInt("-456692"));
    		System.out.println(parseStringToInt(""));
    		
    	}
    	
    	public static int parseStringToInt(String str) {
    		int len = str.length();
    		if(len==0 || str=="")
    			return 0;
    		if((str.charAt(0)=='+'||str.charAt(0)=='-')&& str.length()==1) {
    			return 0;
    		}
    		int sum=0;
    		int fuhao=1; //当第一位为正或者无符号时,置符号位为1
    		if(str.charAt(0)=='-')
    			fuhao = -1;
    		if(str.charAt(0)=='+' || str.charAt(0)=='-')
    			str = str.substring(1,str.length());
    		
    		char[] a = str.toCharArray();
    		for(int i=0;i<a.length;i++) {
    			if(a[i]<48 || a[i]>57)
    				return 0;
    			sum = sum*10+a[i]-48;
    		}
    		sum = sum*fuhao;
    		if(sum<Integer.MIN_VALUE || sum>Integer.MAX_VALUE)
    			return 0;
    		else
    		   return sum;
    		}
    }
    
    展开全文
  • 7. 整数反转

    2020-07-22 15:29:11
    假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围 [ -2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。 解题思路 思路一:数学 首先我们想一下,怎么去反转一个整数? 用栈? ...
  • m++)//将字符串转换为整数 a[m]=i[m]-48; for(int n=0;n;n++) b[n]=j[n]-48; LinkList A(a,lena);//构造A链表 LinkList B(b,lenb);//构造B链表 LinkList C; C=Add(A,B); A.Reserve(A.first);//A链表逆置 A....
  • 如果让您亲自动手来来写一个Integer中的toString()方法和parseInt()方法,您会怎么写?请您先动手写toString()方法。...然后要这个Integer数值转化一个字符数组,所以也要有一个getChars()的private方法...
  • 假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围 [−2的31次方, 2的31次方 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。 题解: 首先进行数字反转,我们第一时间想的肯定是,怎么把数字...
  • 简单直接,第一反应想到的便是整型数据转换字符数组,使用for循环该数组倒置后再转换整形数据,判断其是否溢出,倒置简单,但是怎么判断该数是否溢出呢?可以该数与最大整型数进行比较,但是,若转换时...
  • 如果让您亲自动手来来写一个Integer中的toString()方法和parseInt()方法,您会怎么写? 请您先动手写toString()方法。 ...2.然后要这个Integer数值转化一个字符数组,所以也要有一个getChars()
  • 也就是说,如果是排序好放到大小N的数组中,其实最大的整数应该是N+1。你的任务和算法是找出其中缺失的整数。如果是排序好的,怎么做?如果是无序的,又该如何做?时间复杂度各是什么?你能想到的最优算法是什么?...
  • 由于保存浮点数值的内存空间是保存整数值的两倍,所以js会不失时机的浮点数转换为整数。小数点后面没有数值或者1.0就会被保存成整数。2.特殊的数字类型NaN1、表示不是数字,但是其实它是一个特殊的数字(NaN:Not ...
  • 一般在分享平均值的时候,都会有很多小数点,如何利用excel中的函数他在ROUND(AVERAGE(包含数值的单元格),0),其中0要得到的数值的小数位数。Access中怎么整数?access中取整数有两个函数: 壁虎有一条会断的...
  • ECMAScript语言中的位操作符,所有的数值都是以IEEE-754 64位格式存储,但是位操作符不直接存储64位的储存格式,得把数值64转化32位的整数,执行操作,执行后再将结果转化64位。32位中的前31位用于表示整数的值...
  • 大家好 我是“@不会飞的小飞驴” 1 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和目标值 的那 ...把数值作为key,下标作为value,遍历数组,设置一个map,判断map是否含有当前的目标值-当前
  • 前言中位数是一个可将数值集合划分相等的上下两部分的一个数值。如果列表数据的个数是奇数,则列表中间那个数据就是列表数据的中位数;如果列表数据的个数是偶数,则列表中间那2个数据的算术平均值就是列表数据的...
  • 给定的值四舍五入最接近的整数 示例: var xx= 20.5; console.log(Math.round(xx, xx)) // 21 var xx= 20.49; console.log(Math.round(xx)) // 20 var xx= -20.5; var xx= -20.55; console.log(Math.round
  • 前言中位数是一个可将数值集合划分相等的上下两部分的一个数值。如果列表数据的个数是奇数,则列表中间那个数据就是列表数据的中位数;如果列表数据的个数是偶数,则列表中间那2个数据的算术平均值就是列表数据的...
  • =',') //字符转化为整数 { k+=(a[i]-'0')*sum(l); l++; } if(a[i]==','||i==w) { currptr=new LinkNode; //整数存到双向循环链表中 currptr->data=k; currptr->next=head0; currptr->prev=...
  • 反过来给出一个整数怎么做反向映射? 解法思路,实际单词上就是一种26进制的的表示。 只不过最终在计算值的时候每个位的最小是1 而非 0. 可以A 隐射成0, Z 隐射成 25 但是注意计算数值的时
  • LeetCode ...只有熟练掌握基础的数据结构与算法,才能对复杂问题迎刃有余。...这是我将我的所有公开的算法资料整理的一个电子书,全部题目信息中文化,以前会有一些英文描述,...1521. 找到最接近目标值的函数值 ...
  • 光圈值详解

    2019-02-17 20:51:01
    啥光圈的数值都这么怪,什么1.4、2、2.8、4、5.6、8啥的,看上去既没有规律,还有很多都是小数,直接用1、2、4、8这种整数来表达多好啊。在研究之后,终于发现了光圈数值的来源。 首先,每一支镜头都有最大光圈,...
  • 当我们要求的是从x个数值中随机挑选n个数值,且这x个数值为1->x的时候,这个时候求数学期望不需要按上面的解法,直接E(a)=n*(x+1)/2 2、伤害计算题目及解法 原题链接 来源:牛客网 题目描述 勇士菜哭武获得了一...
  • 每当考试阅卷结束后,老师们都要对考试成绩进行统计,而统计各分数段人数是其中必不可少的一部分。那么怎么快速对各分数段人数进行统计呢?...FLOOR 函数参数用来将数值向下舍入最接近的整数,或者最为...
  • 整数函数 数值取整 求余数的函数 四舍五入公式 对数字进行四舍五入 如何实现“见分进元” 四舍五入 如何四舍五入取两位小数 根据给定的位数,四舍五入指定的数值 四舍六入 如何实现2舍3入 怎么设置单元格以千元四...
  • EXCEL函数公式集

    热门讨论 2010-03-16 03:26:38
    整数函数 数值取整 求余数的函数 四舍五入公式 对数字进行四舍五入 如何实现“见分进元” 四舍五入 如何四舍五入取两位小数 根据给定的位数,四舍五入指定的数值 四舍六入 如何实现2舍3入 怎么设置单元格以千元四...
  • 然后根据实际的机器环境它们定义int、short、long等类型。这样看来,所有的问题都解决了,是吗? 1.4 新的64位机上的64位类型是什么样的? 指针声明 1.5 这样的声明有什么问题?char*p1,p2;我在使用p2的时候...
  • o 6.13 考虑到有关空指针的所有这些困惑, 难道要求它们内部表达都必须 0 不是更简单吗? o 6.14 说真的, 真有机器用非零空指针吗, 或者不同类型用不同的表达? o 6.15 运行时的 ``空指针赋值" 错误是什么意思...
  • 然后根据实际的机器环境它们定义int、short、long等类型。这样看来,所有的问题都解决了,是吗? 1.4 新的64位机上的64位类型是什么样的? 指针声明 1.5 这样的声明有什么问题?char*p1,p2;我在使用p2的时候...

空空如也

空空如也

1 2 3
收藏数 51
精华内容 20
关键字:

怎么把数值为整数