整數(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ò)充