发布网友 发布时间:2022-05-01 19:13
共2个回答
热心网友 时间:2022-06-21 17:57
负数的补码就是对反码加1,而正数不变,正数的原码反码补码是一样的.
1.补码的得来:是为了让负数变成能够加的正数,so,负数的补码=模-负数的绝对值
比如:-1 补码:1111 1111(0000 0001,也就是-1的绝对值,取反加1得来)
当一个数要减1的时候,可以直接加 1111 1111
2.原码的得来:(负数的原码,直接把对应正数的最高位改为1)
原码能够直观的表示一个负数(能直观的把真值显示出来,如 -1为1000 0001
其中最高位表示符号位,不进行算术计算)
3.原码和补码之间转换:补码= 反码+1
4.现在来推-128的补码:
-128的补码:10000 0000 - 1000 0000(+128没有符号位)=1000 0000
-128的反码:1111 1111(1000 0000 -1=1000 0000+1111 1111=1111 1111)
-128的原码:1000 0000(反码取反)
往回推:
-128的原码 1000 0000 (-128,进位被舍去)
-128的反码 1111 1111
-128的补码 1000 0000(1111 1111(反码) + 1=1000 0000,这里实际上真正相加的是
1111 1111后面的7位,第1位是符号位始终不会变,
所以,当进到第8位的时候,就表示溢出了,会被舍弃)
5. 0只有一个补码0000 0000(听说可以证明的),如果是这样,那么1000 0000就不会表示成-0的补码
即:补码1000 0000唯一的表示-128
在补码中用(-128)代替了(-0),所以补码的表示范围为: (-128~0~127)共256个.
注意:(-128)也有相对应的原码和反码, 它的反码是(11111111)原码仍然是(10000000)(-128)
补码的加减运算如下:
下面是补码的运算:
( 1 )- ( 1 )= ( 1 )+ ( -1 )
=(00000001)补+ (11111111)补((11111110)+1)(反码加1)
= (00000000)补= ( 0 )正确
( 1 )- ( 2)= ( 1 )+ ( -2 )
= (00000001)补+ (11111110)补
= (11111111)补= ( -1 ) 正确
(-1) = (10000001)原码=(11111110 )反码 =((11111110 )+ 1)补码
热心网友 时间:2022-06-21 17:57
补码,来自于:补数。
一般的常识:
钟表时针,倒拨 3 小时,可以用“正拨 9 小时”来代替。
分针,倒拨 X 分,可以用 正拨 60-X 代替。
60 是分针的周期。
十进制数,两位:0~99,周期就是一百。
-1 可以用 +99 代替。
如: 25 - 1 = 24
25 + 99 = (1) 24
忽略进位 1 百,结果就是相同的。
那么,-1 的补数,就是 99 。
-2 的补数,就是 98 。
-X 的补数,就是【 周期 + 该负数 】。
--------
借助于补数,就可以用加法,代替减法运算。
所以,计算机就可以节省硬件了。
--------
八位二进制:0000 0000~1111 1111(0~255)。
周期是 256。
那么,-1 可以用 1111 1111 (+255) 代替。
即:
-1 的补码,就是 1111 1111 (= 256-1=+255) 。
-2 的补码,就是 1111 1110 (= 256-2=+254) 。
。。。
-X 的补数,就是【 周期 + 该负数 】。
-128,就可以用 1000 0000 (= 128)代替 。
正数,不需要变换,直接运算即可。
--------
在计算机中,负数,就是用补码存储、计算的。
原码和反码,毫无用处,它们在计算机中都不存在。