C語(yǔ)言整數(shù)編碼

整數(shù)的正負(fù)表示

有符號(hào)數(shù): 最高位作符號(hào)這種表示的整數(shù)叫做有符號(hào)數(shù)(有正負(fù)之分)。

最高位作符號(hào)位1表示負(fù)數(shù)0表示正數(shù)

如果用1個(gè)字節(jié)(8位)表示整數(shù),那么:

????1111000:負(fù)數(shù)

????0111000:正數(shù)


無(wú)符號(hào)數(shù):無(wú)負(fù)數(shù),表示0和正整數(shù),最高位無(wú)需表示正負(fù)。


一個(gè)字節(jié)的整數(shù)

有符號(hào)[-128:127]

無(wú)符號(hào)[0,255]


整數(shù)的編碼:原碼

原碼就是在數(shù)值前面增加一位符號(hào)數(shù)(即最高位為符號(hào)數(shù))該位為0表示正數(shù),該位為1表示負(fù)數(shù),其余位表示數(shù)值的大小。

小例子:以一個(gè)字節(jié)作為整數(shù)的存儲(chǔ)

??? ????1:? 00000001

?????? -1: 10000001

那么1-1=1+(-1) = 00000001 + 10000001 = 10000010 = -2是錯(cuò)誤的,符號(hào)位無(wú)法參加運(yùn)算。


整數(shù)的編碼:反碼

??? 正整數(shù)的反碼就是其自身,而負(fù)整數(shù)的反碼可以通過(guò)對(duì)其絕對(duì)值逐位求反來(lái)求得。以一個(gè)字節(jié)作為整數(shù)得存儲(chǔ)長(zhǎng)度為例子。

小例子:以一個(gè)字節(jié)作為整數(shù)的存儲(chǔ)

????1:? 00000001

?? -1: 10000001 => 11111110

那么1 – 1 = 1 + (-1) = 00000001 + 11111110 = -0

反碼的問(wèn)題出現(xiàn)在(0)和(-0)上,因?yàn)樵谌藗兊挠?jì)算概念中零是沒(méi)有正負(fù)之分的。


整數(shù)的編碼: 補(bǔ)碼

??? 正數(shù)的補(bǔ)碼為它本身,負(fù)數(shù)的補(bǔ)碼就是它的絕對(duì)值求反加1。

??? 如果一個(gè)二進(jìn)制數(shù)是負(fù)數(shù)1001100怎么才能知道它原來(lái)的數(shù)呢?還是取反加1

??? 0的補(bǔ)碼是0

??? 100的補(bǔ)碼: 1100100

??? 1的補(bǔ)碼00000001

??? -1的補(bǔ)碼00000001->11111110+1 = 11111111

??? 127的補(bǔ)碼01111111

??? -128的補(bǔ)碼10000000 -> 01111111+1=10000000

??? 47的補(bǔ)碼00101111

??? -47的補(bǔ)碼11010000 + 1 = 11010001

補(bǔ)碼的好處 0是唯一的好處 符號(hào)位可以參與計(jì)算

擴(kuò)充 一個(gè)字節(jié)的補(bǔ)碼擴(kuò)充到2個(gè)字節(jié),4個(gè)字節(jié);

正數(shù) 零擴(kuò)充

負(fù)數(shù) 符號(hào)位擴(kuò)充

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容