原码,反码,补码
0赞原码:二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码:正数的补码与其原码相同;负数的补码是在其反码的末位加1。
例:
[+7]反= 0 0000111 B [+0]反=00000000B
[-7]反= 1 1111000 B [- 0]反=11111111B
[-7]补= 1 1111001 B [ 0 ] 补=00000000B (仅此一个)
(1) 已知原码,求补码。
负数 :原码——(符号位不变,数值部分按位求反;得反码,再在其反码的末位加1。)—— 补码
2) 已知补码,求原码。
负数 :符号位不变,先取反后加1 ( 或者是先减1后取反)。
但是需要注意 [1000 0000]补 = =-128,如果按照上面的运算 [1000 0000]补 = [0000 0000]这个是不正确的。
如果是 8bit, 用补码可以表示的范围是 -128 ~ 127 补码可以多保存一个最小值。
个人理解:就像是一个128个刻度的表盘(0-127个数字即[000 0000]-[111 1111]),正转到127=[111 1111] 表示正数127,当转到128的时候归零了。
在负数里面就是反转一个刻度表示-1 ,反转到-127 = [000 0001],当再反转一个格到[000 0000]的时候这个128给了负数
也就是0 占用了+128 的位置。
所以8bit 的补码表示范围是 -128 ~ 127 之间。
本文为复制粘贴的结果,非原创。)——要是我创的别人也不用啊,哈哈