二进制原码和补码

当原码为正数的时候,正数的原码反码补码都相同,即00011的反码也为00011,补码也为00011.当原码为负数的时候,反码即按位取反,补码为反码加一,10011可表示-3,那么符号位不变,其余位按位取反即反码11100.补码便是11101.

现代计算机多数以二进制补码的形式来存放整数。简单的说,一个二进制数的每一位对应了一个权值,从最低为到最高位,权值依次是1、2、4、8、16……以此类推。其中,最高位若为1,表示负数,该为的权值是负数,如果为0,这个数表示正数。整个二进制数的对应十进制值就是把各个位的权值乘以对应位上的数然后求和。就按楼主的3位二进制数举例:
可以表示的范围应该是[-4, 3]。111并不是最小的负数,按照刚才说的权值来算,111代表的十进制数是:-4+2+1=-1,即最高位的权值是负的。所以最小的负数应该是100,即-4+0+0=-4.一共的能表示的范围是100、101、110、111、000、001、010、011,分别对应了-4、-3、-2、-1、0、1、2、3。

补码为10000000的原码是什么

[10000000]补 =[10000000]反+1 =11111111+1
=(1)00000000 =00000000(最高位溢出了,符号位变成了0)

你可能会问 :10000000这个补码表示的哪个数的补码呢?
其实这是一个规定,这个数表示的是-128 其实就是将-0强表示为-128

用补码能够表示的范围为-128~127,0~127分别用00000000~01111111来表示,而-127~-1则用10000001~11111111来表示,多出的10000000则用来表示-128。因此对于任何一个n位的二进制,假若表示带符号的整数,其表示范围为-2^(n-1)~2^(n-1)-1,且有MAX+1=MIN

char ch=127;

ch++;ch的值是多少?它的值是-128,读者可以上机验证一下。

http://www.cnblogs.com/dolphin0520/archive/2012/10/09/2711768.html

猜你喜欢

转载自blog.csdn.net/xxdw1992/article/details/84529482