二進制取反

取反,是Java使用補碼來表示二進制數,在補碼錶示中,最高位爲符號位,正數的符號位爲0,負數爲1。spa

概念

編輯get

補碼的規定以下:it

對正數來講,最高位爲0,其他各位表明數值自己(以二進制表示),如+42的補碼爲00101010。
  對負數而言,把該數絕對值的補碼按位取反,而後對整個數加1,即得該數的補碼。如-42的補碼爲11010110(00101010按位取反11010101+1即11010110)
  用補碼來表示數,0的補碼是單一的,都爲00000000。(而在原碼反碼表示中,+0和-0的表示是不單一的,可參見相應的書籍)。並且能夠用111111表示-1的補(這也是補碼與原碼和反碼的區別)。書籍

運算方法

編輯二進制

 

正數取反

先將初始數值轉換成二進制數,再對二進制數的每一位(包括第一位的符號位)進行運算:即將0變爲一、將1變爲0。獲得的是最終結果的補碼,要轉換爲最終結果的原碼則需再次取補碼,就能獲得計算結果。方法

【例1】對 5 進行取反。co

假設爲16位。ps

5轉換爲二進制數爲: 0000 0000 0000 0101獲得二進制數tar

每一位取反: 1111 1111 1111 1010獲得最終結果的補碼

取補碼: 1000 0000 0000 0110獲得最終結果的原碼

轉換爲十進制數:-6

則 5 取反爲 -6 .

 

負數取反

先將初始數值轉換成二進制數,再取得二進制數的補碼,以後對補碼的每一位(包括第一位的符號位)進行運算:即將0變爲一、將1變爲0。獲得的是最終結果的補碼(到達這一步後所得的二進制數爲正數,因爲正數的原碼、反碼、補碼相同,後面的運算能夠忽略,視此步獲得的爲最終結果的二進制數),要轉換爲最終結果的原碼則需再次取補碼,就能獲得計算結果。

【例2】對 -5 進行取反。

假設爲16位。

-5 轉換爲二進制數爲: 1000 0000 0000 0101獲得二進制數

取補碼: 1111 1111 1111 1011獲得二進制數的補碼

每一位取反: 0000 0000 0000 0100 獲得最終結果的補碼

取補碼: 0000 0000 0000 0100獲得最終結果的原碼

轉換爲十進制數:4

則 -5 取反爲 4 .

 

簡便方法

也能夠用適合人類運算的計算方法:

如對 a 按位取反,則獲得的結果爲 -(a+1) .

此條運算方式對正數負數和零都適用。

相關文章
相關標籤/搜索