计算机内存储整数都是用的补码。
已知十进制求二进制
- 求正整数的二进制
除2取余,直至商为0,余数倒叙艾许
- 求负整数的二进制
先求出与该负数相对应的正整数的二进制代码,然后将所有位取反,末尾加1,不够位数时,左边补1【所谓不够位数就是不满数据类型的长度,例int i = -3,int为32bit,而-3的绝对值的二进制代码为11,加1后为100,占3位,则左边的28位都补1】
0全是0
已知二进制求十进制
- 如果首位时0,则表明时正整数,按普通换算方法来求
- 如果首位是1,则表明是负数
将所有位取反,末尾加1,所得数字就是该负数的绝对值
- 如果全是0,则对应的十进制数字就是0
输出结果为
从上面的结果我们可以看出,在有符号整形变量中,所能存储的整数范围是[-32768,32767]。
那为什么32767加1后就成了-32768了呢?
根据上面的结论,可以得出
32767 原码:0111 1111 1111 1111 补码:0111 1111 1111 1111
补码加上1后为:1000 0000 0000 0000
因首位是1,所以可得十进制数为负数
补码取反加1,可得十进制数的绝对值为32768
综上可得,32768加1后可得-32768