在計算機二進制中,最高位表示符號位,若為0表示正數,若為1表示負數。同時我們需要清楚知道原碼、反碼、補碼的概念,這里請自行了解。
取非/反(~):在二進制補碼中,要獲取數字的負數,需反轉所有位並加1。比如(~-5),5是00000101,那么-5則是:11111010 + 00000001 = 11111011,然后再取(~)是00000100,所以結果為4。若是正數,則其補碼是其本身,比如(~5),5是00000101,那么直接取(~),所以結果為11111010,其實這個值就是6的補碼即-6。比如如下例子:
~(-3) = 2 ~(-2) = 1 ~(-1) = 0 ~0 = -1 ~1 = -2 ~2 = -3由上我們可總結出:~
x = -x - 1。
左移(<<):給定數據乘以2的位數次冪。例如11<<2(11 * 2^2 = 44)
有符號右移(>>):進行向右移位后,將最左邊的符號位(Most Significant Bit MSB)填充到最左邊的位,這稱為符號擴展,當向右移動負數時,它可以保留負號的符號。若為正數,則結果為給定數據除以2的位數次冪並舍去模。例如11>>2(11/2^2 = 2),若為負數,則結果為根據正數的結果取負數並減1,也就是(-x-1)。
無符號右移(>>>):有符號右移保留符號位,而無符號位右移則是不保留以0進行填充,也就是無符號右移主要是針對正數,此時結果和有符號右移中的數據不帶符號一致。