计算机中的原码、反码和补码
原码和反码都很简单,原码是数字的二进制表示,反码是数字二进制表示后每一位都取反。
重点说补码:
为什么要用补码?
假设当前时针指向8点,而准确时间是6点,调整时间可有以下两种拨法:一种是倒拨2小时,即8-2=6;另一种是顺拨10小时,8+10=12+6=6,即8-2=8+10=8+(12-2)(mod 12).在12为模的系统里,加10和减2效果是一样的,因此凡是减2运算,都可以用加10来代替。在计算机运算中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以了。把补数用到计算机对数的处理上,就是补码。1简单理解为可以把两个数的减法运算改为补码加法运算。
补码的求法,先看例子:
例:求-5的补码。
-5对应正数5(00000101)→所有位取反(11111010)→加1(11111011)
所以-5的补码是11111011。
计算机中,表示有符号数时,在二进制的首位用0表示正数,用1则表示负数。求负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1 。
对于不同位数的系统:
同一个数字在不同位数的补码表示形式中是不同的。比如-15的补码,在8位二进制中是11110001,然而在16位二进制补码表示中,就是1111111111110001。
0的补码唯一,8位系统中为00000000,16位系统中为0000000000000000
https://baike.baidu.com/item/%E8%A1%A5%E7%A0%81/6854613?fr=aladdin ↩︎