按位取反:
要弄懂這個運算符的計算方法,首先必須明白二進制數在內存中的存放形式,二進制數在內存中是以補碼的形式存放的
原碼
原碼(true form)是一種計算機中對數字的二進制定點表示方法。原碼表示法在數值前面增加了一位符號位(即最高位為符號位):正數該位為0,負數該位為1(0有兩種表示:+0和-0),其余位表示數值的大小。
[+7]原= 0 0000111 B [-7]原= 1 0000111 B
反碼
反碼:正數:正數的反碼與原碼相同。
負數:負數的反碼,符號位為“1”,數值部分按位取反。例如: 符號位 數值位
[+7]反= 0 0000111 B [-7]反= 1 1111000 B
補碼
正數:正數的補碼和原碼相同。
負數:負數的補碼則是符號位為“1”。並且,這個“1”既是符號位,也是數值位。數值部分按位取反后再在末位(最低位)加1。也就是“反碼+1”。
[+7]補= 0 0000111 B [-7]補= 1 1111001 B
按位取反
先將初始數值轉換成二進制數,再對二進制數的每一位(包括第一位的符號位)進行運算:即將0變為1、將1變為0。得到的是最終結果的補碼,要轉換為最終結果的原碼則需再次取補碼,就能得到計算結果
【例1】對 5 進行取反。 假設為16位。 5轉換為二進制數為: 0000 0000 0000 0101得到二進制數 每一位取反: 1111 1111 1111 1010得到最終結果的補碼 取補碼: 1000 0000 0000 0110得到最終結果的原碼 轉換為十進制數:-6 則 5 取反為 -6 . 【例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) .
此條運算方式對正數負數和零都適用。