java二進位制正數和負數取反

小白33號發表於2017-08-05
“反碼”,“取反”,“按位取反(~)”,這3個概念是不一樣的。
取反:0變1,1變0
反碼:正數的反碼是其本身,對於負數其符號位不變其它各位取反(0變1,1變0)
按位取反(~): 這將是下面要討論的。
要弄懂這個運算子的計算方法,首先必須明白二進位制數在記憶體中的存放形式,二進位制數在記憶體中是以補碼的形式存放的。
另外正數和負數的補碼不一樣,正數的補碼、反碼都是其本身,負數的反碼是符號位不變,其餘位取反,補碼是反碼加1,即:
正數11:
原碼:00001011
補碼:00001011
反碼:00001011
負數-12
原碼:11111100
反碼:11110011
補碼:11110100
對正數11按位取反
原碼: 00001011
補碼: 00001011
反碼: 00001011
對補碼取反: 11110100
減1得反碼: 11110011
反碼取反:     11111100

對負數-12按位取反
原碼: 11111100
反碼: 11110011
補碼: 11110100
對補碼取反: 00001011


對正數取反的口訣:補碼取反減1取反
對負數取反的口訣:原碼取反加1取反
     規律:正數的取反等於正數加1取負        例如11的取反等於-12
        負數的取反等於負數加1取正      例如-12的取反等於11

相關文章