一臉懵逼之---源碼 反碼 補碼 移碼 位移運算

 

源碼:最高位是符號位 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,對計算機而言,是轉換成二進制,而後作二進制的乘法,至關的麻煩,雖然我也不會算,位移運算效率較好

 

& 與運算(兩真爲真)      0表示假 1 表示真

       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]

 

|   或運算(1真即真)      0表示假 1 表示真

  6 | 3 = 7

   0110

|  0011

   0111

 

^  異或運算(兩邊相同爲假,不一樣爲真)  0表示假 1 表示真

異或運算能夠用來加密 1次異或加密,2次異或解密

相關文章
相關標籤/搜索