位非運算符(~)
運算規則:如果位爲0,結果是1,如果位爲1,結果是0.
比如:~37
在Java中,所有數據的表示方法都是以補碼的形式表示,如果沒有特殊說明,Java中的數據類型默認是int,int數據類型的長度是8位,一位是四個字節,就是32字節,32bit.
37轉爲二進制是100101
補碼後爲: 00000000 00000000 00000000 00100101
取反爲: 11111111 11111111 11111111 11011010
因爲高位是1,所以原碼爲負數,負數的補碼是其絕對值的原碼取反,末尾再加1。
因此,我們可將這個二進制數的補碼進行還原:
(1)首先,末尾減1得反碼: 11111111 11111111 11111111 11011001
(2)其次,將各位取反得原碼:00000000 00000000 00000000 00100110,
(3)此時二進制轉原碼爲38
(4)所以~37 = -38
快速計算
正數做非運算時:取反、-1,取反
負數做非運算時:取反、+1、取反
反碼
反碼的表示方法是:
正數的反碼是其本身
負數的反碼是在其原碼的基礎上, 符號位不變,其餘各個位取反.
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
補碼
補碼的表示方法是:
正數的補碼就是其本身
負數的補碼是在其原碼的基礎上, 符號位不變, 其餘各位取反, 最後+1. (即在反碼的基礎上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]補
[-1] = [10000001]原 = [11111110]反 = [11111111]補