原码 反码 补码初步理解
所有带符号数据在计算机中是以补码的方式存储的,这是因为①计算机只能用二进制数来存储数据(即0 1) 而计算机在日常中给我们输出数据的时候是以原码的方式来表达的。②计算机在cpu中的加法器只能计算补码,而原码,反码的计算都不对。
在计算机中一个最小的存储单元是1byte=8bit(位)
原码 最高位用0表示正数 1表示负数 其余七位用该数的绝对值的二进制表示。
原码10(十进制) 0000 1010(二进制)
-10(十进制) 1000 1010(二进制)
反码 正数的反码与原码一致,而负数的反码 最高位(符号位)不变 其余的按位取反。
反码10(十进制) 0000 1010(二进制)
-10(十进制) 1111 0101(二进制)
补码 正数的补码与原码一致 而负数的补码则为该数的反码加1.
补码10(十进制) 0000 1010(十进制)
-10(十进制) 1111 0101(二进制)
计算一下10-6
-6的原码 1000 0110
反码 1111 1001
补码 1111 1010
先用原码计算10-6=16 错误
0000 1010
1000 0110
——————
1001 0000
反码计算10-6=3 错误
0000 1010
1111 1001
——————
0000 0011
补码计算 10-6=4 正确
0000 1010
1111 1010
——————
0000 0100
即只有补码计算正确
补码运算得到的值 还是 补码;需要把补码转变为原码。补码的补码就是原码。
1byte=8bit 2的8次方等于256(0—255)
把它分成两部分 0—127表示正数 128—255表示负数(-128— -1)表示负数
有意思的是
128的二进制 1000 0000
反 1111 1111
补 0000 0000
而0 的二进制 0000 0000
反 0000 0000
补 0000 0000
128的补码和0的补码冲突了 违反了计算机的二义性 。
所以128 没有反码 原码 补码 -128的没有反码 原码和补码都是
1000 0000
注 补码的范围是 -128—127。