负数的原码、反码、补码

2024-11-26 20:36:13
推荐回答(5个)
回答1:

补码,在数学领域,是有严格定义的。

在定义式中,根本就没有“求反加一”的说法。

-------------------

在计算机系统中,数值,一律采用补码表示和存储。

原码和反码,都是不存在的。

补码,是怎么定义的?

  就按照八位来说吧,其模,就是 2^8 = 256。

数值 0,在计算机中,显然是用 0000 0000 存放的。

数值-1 怎么存放?

 毫无疑问,就是 0-1,你会怀疑吗?

 你用 0000 0000 减去一,即可得到 1111 1111 (十进制 255)。

 即使产生了借位,也是八位之外的,不必考虑。

 由此即可得到:[-1]补码=256-1 = 255。

数值-2 怎么存放?

 显然就是-1 再减一,你还有怀疑吗?

 即可得到:[-2]补码=256-2 = 254 = 1111 1110。

。。。

数值-128 怎么存放?

 当然就是:[-128]补码=128 =  1000 0000。

-------------------

按照上述规律,你自己,都可以总结出补码的定义式:

  [ X ]补码=模 - | X |,  X < 0。

你多看几本书,一定能看到这个定义式。

当然,书上也写了“原码取反加一。。。”。

只是,-128 并没有原码和反码,你拿什么“取反加一”?

-------------------

补码的来源,就是这么简单。

补码,与原码反码,没有任何关系。

取反加一,并没有理论依据。

鼓吹“取反加一”的人,不是上当受骗的,就是诚心想要骗人。


回答2:

以-3为例,
[-3]原 = 1000 0011
[-3]反 = 1111 1100 原码除符号位外各位取反
[-3]补 = 1111 1101 反码末位加1

-3的补码减1得 1111 1100
再取反得 1000 0011
即为a1,a1也就是-3的原码。

-3的补码取反得 1000 0010
再加1得 1000 0011
即为a2,a2也就是-3的原码。

结论,负数的补码减1取反得原码,取反加1也得原码。

回答3:

对于负整数-x,先写出x的二进制值,高位补0,补足8位或16位。
再写[-x]原=符号位变为1,后续位不变
[-x]反=符号位为1,其余位=原码各位取反(0,1互换)
[-x]补=[-x]反+1

回答4:

回答5:

这就和移位乘二除二一样...没什么道理好说的