源碼 反碼 補(bǔ)碼
- 計(jì)算機(jī)的常見數(shù)據(jù)類型
- 機(jī)器碼&真值
機(jī)器數(shù)
數(shù)值在計(jì)算機(jī)中的二進(jìn)表示形式
注意:機(jī)器數(shù)是帶有符號(hào)的充甚,==最高位是符號(hào)位畏铆,使用0表示整數(shù),使用一表示負(fù)數(shù)
5->0000 0101
一個(gè)數(shù)據(jù)表示時(shí)怖侦,第一位符號(hào)位墓捻,剩余的為有效位
字 16位 1位符號(hào) 15有效數(shù)據(jù)位
int ->整數(shù) 4個(gè)字節(jié) 32 -2147483648~2147483647
-231~232-1
long->長(zhǎng)整形 8個(gè)字節(jié) 64 一位符號(hào)63 -263~263-1
真值
機(jī)器數(shù)所對(duì)應(yīng)的二進(jìn)制的真正數(shù)值
1000 0111=-7
0000 1111=15
原
碼
==源碼就是符號(hào)位加上真值的絕對(duì)值==
正數(shù):符號(hào)位 有效位 +11 11-> 000 1011
? 0000 1011
負(fù)數(shù):符號(hào)位 有效位 -15->取絕對(duì)值 15-> 000 1111
? 1000 1111
求原碼:
34=0010 0010
-39=1010 0111
-55=1011 0111
反碼
正數(shù):正數(shù)的反碼=原碼如 +9:0000 1001->0000 1001
==負(fù)數(shù):符號(hào)位不變,其余各位逐一取反交煞,0咏窿,1 1->0,0->1==
-49 原碼為 1011 0001 素征,反碼為 1100 1110
-36 原碼為 1010 0100 集嵌,反碼為 1101 1011
補(bǔ)碼
-7 原碼=1000 0111 反碼 1111 1000 補(bǔ)碼 1111 1001
正數(shù):正數(shù)的原碼=反碼=補(bǔ)碼
==負(fù)數(shù):先求的反碼,在負(fù)數(shù)反碼的基礎(chǔ)上加1==
-65 原碼=1100 0001 反碼 1011 1110 補(bǔ)碼1011 1111
-37 原碼=1010 0101 反碼1101 1010 補(bǔ)碼 1101 1011
-120 原碼=1111 1000 反碼 1000 0111 補(bǔ)碼 1000 1000
擴(kuò)展知識(shí)
為什么需要反碼和補(bǔ)碼御毅?
在設(shè)計(jì)計(jì)算機(jī)時(shí)根欧,只設(shè)計(jì)了加法器,沒有設(shè)計(jì)減法器端蛆;
5-3 =5+(-3)
原碼
5=0000 0101[原碼]
-3=1000 0011[原碼]
0000 0101
1000 0011
1000 1000[原碼]=-8
原碼是不可以直接計(jì)算的
反碼:解決了只設(shè)計(jì)加法器凤粗,使用加法器進(jìn)行減法運(yùn)算;
缺點(diǎn):正負(fù)相加 0的表示不唯一今豆;
1-1=1+(-1)
1=0000 0001[反]
-1=1000 0001[原碼]
? 0000 0001
? 1111 1110
? 1111 1111[反碼]=1000 0000[原碼]=-0 負(fù)0
補(bǔ)碼[高位溢出]
1=0000 0001[補(bǔ)]
-1=1111 1111[補(bǔ)]
? 0000 0001
? 1111 1111
? 0000 0000
一個(gè)字節(jié)8位嫌拣,表達(dá)的范圍-27~27-1
用一個(gè)字節(jié)原碼表示不了-128,得用兩個(gè)字節(jié)表示
使用補(bǔ)碼運(yùn)算練習(xí)
44-12=32
44+(-12)=32
將補(bǔ)碼轉(zhuǎn)原碼
因?yàn)閿?shù)的補(bǔ)碼不能直接讀出結(jié)果晚凿,但是原碼可以,所以將補(bǔ)碼轉(zhuǎn)原碼瘦馍,可以讀出負(fù)數(shù)的值歼秽;
補(bǔ)碼->原碼
原則:補(bǔ)碼的補(bǔ)碼
==把補(bǔ)碼當(dāng)原碼,求原碼==
計(jì)算規(guī)則:==符號(hào)位不變情组,其余取反燥筷,然后加一箩祥;==
求-128的補(bǔ)碼
一個(gè)字節(jié),不能表示-128的原碼
1000 0000 1000 0000[-128的原碼]
求反碼
1111 1111 0111 1111
求補(bǔ)碼
1111 1111 1000 0000