1. 程式人生 > >java語言基礎回顧(二)--位運算以及原碼,反碼,補碼

java語言基礎回顧(二)--位運算以及原碼,反碼,補碼

原碼,反碼,補碼簡介

*原碼

  • 二進位制的定點表示法,即最高位為符號位,“0”表示正,“1”表示負,其餘位表示數值的大小。
  • 例:通過一個位元組表示 +7 原碼:0(符號位) 0000111
  • -7原碼:1(符號位) 0000111

*反碼 正數的反碼與原碼一樣;負數的反碼是對其除符號位外逐位取反,1變0,0變1;

*補碼 正數的補碼與原碼一樣;負數的補碼是它的反碼加1求和; 方法:求負數的補碼:依照原碼求出反碼再加1 求負數的補碼的原碼:補碼-1再求出原碼

計算機都是以資料的補碼進行儲存和運算的,所以進行有關於負數運算的時候要注意。必須先求出負數的補碼再運算,而正數則不用,因為它的補碼是它的本身。

位運算

位運算子的分類以及用法

  1. 與 & 有0則0,表示式兩邊都為true才true
  2. 或 | 有1則1 ,表示式只要有一邊為true就true
  3. 異或 ^ 相同則0,不同則1,表示式兩邊相反則true
  4. 取反 ~ 按位取反(符號位也需要,和求反碼不一樣)
  5. 有符號位左移 << a>>b,a向左移動b位,則是a乘以2的b次冪
  6. 有符號位右移 >> 與左移相反,則是a除以2的b次冪
  7. 無符號位右移 >>> 忽略符號位,空位都以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

面試題

實現兩個數值的交換,不能定義第三方變數 異或運算^的特徵:一個數異或同一個數兩次等於它本身,不變。 在這裡插入圖片描述 在這裡插入圖片描述 而開發的時候多使用定義第三方變數的方法: 在這裡插入圖片描述

在這裡插入圖片描述