1. 程式人生 > >JAVA按位取反運算

JAVA按位取反運算

按位取反是對補碼進行運算,當運算完後,再將補碼變回原碼。
這個符號為按位取反運算子。按位取反的運算規則為0變成1,1變成0. [0->1,1->0]
有這麼一個題:1.求~9的結果是什麼
解:9的二進位制數表示 0000 1001
9的原碼 0000 1001
9的反碼 0000 1001
9的補碼 0000 1001
按位取反操作 1111 0110
變為原碼先減一 1111 0101
再取反 1000 1010 (-10)

2.求~-9的結果
-9的二進位制數表示 1000 1001
-9的原碼 1000 1001
-9的反碼 1111 0110
-9的補碼 1111 0111
按位取反操作 0000 1000
變為原碼 0000 1000 (8) 因為正數的補碼、反碼、原碼都是一個樣。

假如9的型別是char型,char型別佔一個位元組,一個位元組等於八位二進位制數,所以它的資料寬度為八位二進位制數(0000 0000)。最高位,也就是最左邊的0為符號位:0表示正數,1表示負數。
9用二進位制數儲存在記憶體中為:0000 1001 (原碼)這就是原碼
而9為正數,它的原碼、反碼、補碼都是同一個,都是 0000 1001
按位取反時,需要對所有的二進位制數取反。 按位取反後變成 1111 0110 此時的二進位制數為補碼,而且是負數(因為最高位為1,表示為負數),就需要將其變為原碼,補碼變為原碼,怎麼變呢,首先先減1,此時變為 1111 0101,然後再變為原碼(變為原碼時,符號位不變)1000 1010(原碼),此時的原碼就是這個,它就是-10.所以~9=-10.