java語言基礎回顧(二)--位運算以及原碼,反碼,補碼
阿新 • • 發佈:2018-12-14
原碼,反碼,補碼簡介
*原碼
- 二進位制的定點表示法,即最高位為符號位,“0”表示正,“1”表示負,其餘位表示數值的大小。
- 例:通過一個位元組表示 +7 原碼:0(符號位) 0000111
- -7原碼:1(符號位) 0000111
*反碼 正數的反碼與原碼一樣;負數的反碼是對其除符號位外逐位取反,1變0,0變1;
*補碼 正數的補碼與原碼一樣;負數的補碼是它的反碼加1求和; 方法:求負數的補碼:依照原碼求出反碼再加1 求負數的補碼的原碼:補碼-1再求出原碼
計算機都是以資料的補碼進行儲存和運算的,所以進行有關於負數運算的時候要注意。必須先求出負數的補碼再運算,而正數則不用,因為它的補碼是它的本身。
位運算
位運算子的分類以及用法
- 與 & 有0則0,表示式兩邊都為true才true
- 或 | 有1則1 ,表示式只要有一邊為true就true
- 異或 ^ 相同則0,不同則1,表示式兩邊相反則true
- 取反 ~ 按位取反(符號位也需要,和求反碼不一樣)
- 有符號位左移 << a>>b,a向左移動b位,則是a乘以2的b次冪
- 有符號位右移 >> 與左移相反,則是a除以2的b次冪
- 無符號位右移 >>> 忽略符號位,空位都以0補齊
口訣: 正數取反等於正數加1取負 例11取反等於-12 負數取反等於負數加1取正 例-7取反等於6
注意點: 負數的位運算: 例 :-7&-1 -7的補碼: 1 111 1001 -1的補碼:1 111 1111 相與:1 111 1001 求出了結果的補碼**(注意:答案不是這個,還要求出它的原碼)** 1 111 1000 接著求出結果的反碼 1 000 0 111 最後是求出它的原碼 ,為 -7
面試題
實現兩個數值的交換,不能定義第三方變數 異或運算^的特徵:一個數異或同一個數兩次等於它本身,不變。 而開發的時候多使用定義第三方變數的方法: