源碼:最高位是符號位 0表示正數 1表示負數,可是相加有問題,如上圖,相加爲-2,通常計算機中,不以源碼爲計算標準 加密
反碼:最高爲是符號位 0表示正數 1表示負數,負數其他位置取反,-1就表示位11111110,相加就是11111111 ,表示-0,不用spa
補碼:最高位是符號位,負數其他位置取反在+1 ,相加是00000000,表示正確blog
移碼:在補碼基礎之上,對首位取反,之因此這樣作,是由於,補碼看起來混亂,正數的首位是0,負數的首位是1,用移碼的話,看起來清晰,大小可見源碼
上面的幾個,瞭解便可效率
>> << >>> <<<基礎
>> << 帶符號右移/左移 移動規則:高位出現的空位,正數補0,負數補1,超出捨棄二進制
>>> <<< 無符號右移/左移 移動規則:高位出現的空位,不管是正數仍是負數,高位統統補0。im
4 是 0000 0100 4>>2 0000 0001 表示1 = 4/2(2進制)/2(移動2位) 總結
4 是 0000 0100 4<< 0001 0000 表示16 = 4*2(2進制)*2(移動2位) img
總結:x>>y x/2的y次方,如遇小數點捨棄(6/2/2=1.5,捨棄小數部分,爲1),負數通用
總結:x<<y x*2的y次方,負數通用
總結:x>>>y x <<<y x爲正數,上面的結論通用,x爲負數不通用(原來補1,如今補0)
凡是2的倍數運算,都用位移運算,如2*8,對計算機而言,是轉換成二進制,而後作二進制的乘法,至關的麻煩,雖然我也不會算,位移運算效率較好
2&4=0 6&3=2
0000 0010 0000 0110
& 0000 0100 & 0000 0011
0000 0000 0000 0010
總結:&運算的應用----取範圍 x&4 ,範圍 [0,4] ;x&y 最大值是y ,範圍 [0,y]
6 | 3 = 7
0110
| 0011
0111
異或運算能夠用來加密 1次異或加密,2次異或解密