数字在计算机中都是用二进制表示的。数字有有符号和无符号之分,所以需要分正负。
正数的原码、反码和补码是一样的。
负数则不一样,最高位用1来表示符号位,为负。
反码:符号位不变,其他位按位取反。
补码:反码+1。
实验证明,用原码和反码来进行负数的运算并不完全正确,用补码则没有问题。例如20-18,先计算20和(-18)的补码,然后相加,再还原出原码即可。20为正数,补码和原码相同是00010100。-18的原码是10010010,反码是11101101,补码是11101110,然后00010100+11101110=00000010,因为补码结果是正数,所以原码也是00000010,即为十进制的2。
注意:当反码和补码是正数时,原码也是正数,且和反码、补码相同;当反码和补码是负数时,再根据补码运算法则反向求出原码即可(补码-1,然后除符号位外按位取反即可)。