學(xué)習(xí)過(guò)計(jì)算機(jī)組成原理的同學(xué)可能知道惨寿,雖然我們可以讓計(jì)算機(jī)做減法運(yùn)算琉闪,但是計(jì)算機(jī)內(nèi)部實(shí)際上是在做加法運(yùn)算迹炼。因?yàn)榧釉冶颉p颠毙、乘、除四則運(yùn)算都可以分解成加法運(yùn)算和位移運(yùn)算砂碉,而且計(jì)算機(jī)也只會(huì)處理這兩種簡(jiǎn)單的運(yùn)算蛀蜜,所以計(jì)算機(jī)內(nèi)部會(huì)通過(guò)一個(gè)叫作加法器的電子元件來(lái)處理減法運(yùn)算。
將減法運(yùn)算轉(zhuǎn)換為加法運(yùn)算就要用到負(fù)數(shù)增蹭,但是計(jì)算機(jī)只認(rèn)識(shí)二進(jìn)制數(shù)字滴某,并不認(rèn)識(shí)符號(hào)“-”。為了表示負(fù)數(shù),人們就規(guī)定二進(jìn)制數(shù)的最高位為符號(hào)位霎奢,符號(hào)位是 0 時(shí)表示證書(shū)户誓,符號(hào)位是 1 時(shí)表示負(fù)數(shù)。
舉個(gè)例子幕侠,1 如果用 8 位二進(jìn)制數(shù)來(lái)表示的應(yīng)該是 00000001帝美,最高位也就是左邊第一位是 0。那么很同學(xué)肯定會(huì)覺(jué)得 -1 的二進(jìn)制數(shù)應(yīng)該是 10000001晤硕,這樣表示會(huì)有什么問(wèn)題呢悼潭?我們都知道 1 +(-1) = 0, 但是 00000001 + 10000001 = 10000001,而忽略符號(hào)位后舞箍,10000001 的表示的十進(jìn)制數(shù)是 1舰褪,這顯然是不對(duì)的,正確答案其實(shí)是 11111110疏橄。很多同學(xué)肯定會(huì)有疑問(wèn)占拍,11111111 去掉符號(hào)位后表示的十進(jìn)制數(shù)不是 126 嗎?1 的負(fù)數(shù)怎么可能是126 呢捎迫?先別急刷喜,我們把 11111111 稱(chēng)作 00000001 的補(bǔ)數(shù)。
補(bǔ)數(shù)又稱(chēng)為補(bǔ)碼立砸,是為了在計(jì)算機(jī)中表示負(fù)數(shù)而定義的概念掖疮。將一個(gè)二進(jìn)制數(shù)的各個(gè)位上的數(shù)值取反然后再將結(jié)果加 1,就可以得到這個(gè)二進(jìn)制數(shù)的補(bǔ)數(shù)颗祝。然后我們來(lái)看一下 1 + (-1) 的二進(jìn)制計(jì)算過(guò)程: 00000001 + 11111111 = 100000000浊闪,得到的是一個(gè) 9 位的二進(jìn)制數(shù),比原來(lái)的 8 位多出了 1 位螺戳,由于硬件物理上的限制計(jì)算機(jī)會(huì)忽略掉最高位的溢出搁宾。因此在計(jì)算機(jī)看來(lái)相加的結(jié)果是 00000000,這也就滿足了 1 + (-1) = 0倔幼。同理盖腿,對(duì)一個(gè)二進(jìn)制負(fù)數(shù)求補(bǔ)數(shù),就可以得到相應(yīng)的正數(shù)损同。