ps:每次看每次忘拴曲,寫一遍看能不能記住 ?fuck
1.
針對的是有符號數(shù)窗骑,也就是最高位是符號位 1表示是負(fù)數(shù) ?0表示正數(shù)
1000 0011 ? 代表有符號數(shù)就是-3
2.
原碼 ?也就是-3 ?符號位 表示正負(fù) ?后7位表示數(shù)值
3.
反碼:0000 0011 的反碼還是 0000 0011
? 1000 0011的反碼是 1111 1100
4.
補(bǔ)碼
0000 0011 補(bǔ)碼 0000 0011
1000 0011 補(bǔ)碼 ?1111 1100 +1= 1111 1101
5.要補(bǔ)碼干嘛
計算機(jī)只有加法運(yùn)算
1-1=0 在計算機(jī)中 是這樣 1+(-1)=0;
所以 一個數(shù)的符號位也要參與運(yùn)算(符號位參與運(yùn)算耳鸯,就可以全部統(tǒng)一為加法運(yùn)算湿蛔?)
我們分別用 原碼 反碼 補(bǔ)碼 來計算下1 - 1的結(jié)果:
1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [1000 0010]原 = -2
1 - 1 = 1 + (-1) = [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0
1 - 1 = 1 + (-1) = [0000 0001]補(bǔ) + [1111 1111]補(bǔ) = [0000 0000]補(bǔ) = [0000 0000]原 = 0
在8位二進(jìn)制中,使用補(bǔ)碼表示的范圍為[-128县爬,+127]阳啥,0沒有符號。
就是隨便給一個8位财喳,其實它是補(bǔ)碼 察迟,然后轉(zhuǎn)化為對應(yīng)的原碼,也就是實際要表示的數(shù)字
比如 給一個 0000 1000 明顯表示的是一個正數(shù) 也就是 8
比如 0111 1111 ?明顯也是正數(shù) 即127
比如 1000 0010 先減去1 得到反碼 1000 0001 然后再把后7位取反耳高,得原碼 也就是 1111 1110扎瓶,那這個數(shù)是-126
從1000 0010 表示-126,可以才出來 1000 0000 是最小的負(fù)數(shù)-128
也就是java 中 byte 可以表示的范圍-128到127