取反符
將二進制表示的數字中的0變為1, 1變為0
但是需要注意的是c++中對int型進行取反操作時,將前面的前導0也進行了取反(int型變量為32bit)。
比如1的二進制表示是
00000000 00000000 00000000 00000001
~(00000000 00000000 00000000 00000001) = 11111111 11111111 11111111 11111110
負數的二進制表示
負數的二進制表示 = 其絕對值的補碼
原碼:一個整數,按照絕對值大小轉換成的二進制數,稱為原碼。
比如-3的原碼是:
00000000 00000000 00000000 00000011
反碼:將二進制數按位取反,所得的新二進制數稱為原二進制數的反碼。
-3的反碼是:
11111111 11111111 11111111 11111100
補碼:反碼加1稱為補碼。也就是說,要得到一個數的補碼,先得到反碼,然后將反碼加上1,所得數稱為補碼。
那么-3的補碼,也就是-3的二進制表示為:
11111111 11111111 11111111 11111100 + 1
= 11111111 11111111 11111111 11111101
同理,整數-1在計算機中的二進制表示為:
1、先取1的原碼:00000000 00000000 00000000 00000001
2、得反碼: 11111111 11111111 11111111 11111110
3、得補碼: 11111111 11111111 11111111 11111111
結論
只有~(-1) = 0
其他整型數取反都是非0的