複製鏈接
請複製以下鏈接發送給好友

取反

鎖定
取反,是Java與C/C++使用補碼來表示二進制數,在補碼錶示中,最高位為符號位,正數的符號位為0,負數為1。
中文名
取反
條    件
C/C++中
性    質
數學術語

取反概念

補碼的規定如下:
對正數來説,最高位為0,其餘各位代表數值本身(以二進制表示),如+42的補碼為00101010。
對負數而言,把該數絕對值的補碼按位取反,然後對整個數加1,即得該數的補碼。如-42的補碼為11010110(00101010按位取反11010101+1即11010110)
用補碼來表示數,0的補碼是單一的,都為00000000。(而在原碼反碼表示中,+0和-0的表示是不單一的,可參見相應的書籍)。而且可以用111111表示-1的補(這也是補碼與原碼和反碼的區別)。

取反運算方法

取反正數取反

先將初始數值轉換成二進制數,再對二進制數的每一位(包括第一位的符號位)進行運算:即將0變為1、將1變為0。得到的是最終結果的補碼,要轉換為最終結果的原碼則需再次取補碼,就能得到計算結果。
【例1】對 5 進行取反。
假設為16位。
5轉換為二進制數為: 0000 0000 0000 0101得到二進制數
每一位取反: 1111 1111 1111 1010得到最終結果的補碼
取補碼: 1000 0000 0000 0110得到最終結果的原碼
轉換為十進制數:-6
則 5 取反為 -6 .

取反負數取反

先將初始數值轉換成二進制數,再取得二進制數的補碼,之後對補碼的每一位(包括第一位的符號位)進行運算:即將0變為1、將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) .
此條運算方式對正數負數和零都適用。