原碼反碼補碼
在其之前我們要先了解計算機裡面的三種機械數
計算機都是通過數字的補碼進行運算
- 原碼
原碼是人類的正常了解方式的二進制,即首位表示的是正負号,其餘位表示的是數值。
-
反碼
負數的反碼是除了符号位不變其餘的0變1,1變0,正數的反碼還是它本身
- 補碼
負數的補碼是除了符号位不變其餘的0變1,1變0,最後在再1,正數的反碼還是它本身
<< (左移):x<<y==x*(2^y)
左移就是将二進制的每一個數都往左移動一位,高位舍去,低位補0
栗子:
- 1<<1
原碼:000000001
第一步:反碼:00000001
第二步:補碼:00000001
第三步:移動:00000010
第四步:反碼:00000010
第五步:原碼:00000010
也就是1*(2^1)=2
- -3<<2
原碼:10000011
第一步:反碼:11111100
第二步:補碼:11111101
第三步:移動:11110100
第四步:反碼:11110011
第五步:原碼:10001100
(因為負數的補碼是最後+1,是以再往原碼轉化的時候應該-1)
也就是-3*(2^2)=-12
<< (右移):x>>y==x/(2^y)
右移就是将二進制的每一個數都往右移動一位,高位補1,低位舍去
- 15>>2
原碼:00001111
第一步:反碼:00001111
第二步:補碼:00001111
第三步:移動:00000011
第四步:反碼:00000011
第五步:原碼:00000011
也就是15/(2^2)=3
- -4>>2
原碼:10000100
第一步:反碼:11111011
第二步:補碼:11111100
第三步:移動:11111111
第四步:反碼:11111110
第五步:原碼:10000001
也就是-4/(2^2)=-1
後記
這個知識其實之前我并不是很了解,之前隻是知道這有什麼作用,但是并沒有弄懂他為什麼是這樣運算的,但是今天被一個好朋友問起來,當時我隻是把怎麼用給她說了說,但是并不知道她那書上和我了解了恰恰相反。。是以就去網上查閱了相關資料,才緻使沒有翻車。。