位非
來自ALSROBOT WiKi
按位取反(~)
在C++中按位取反運算符為波浪符“~”。不像“&”和“|”,按位取反運算符應(yīng)用于其右側(cè)的單個操作數(shù)。按位取反操作會翻轉(zhuǎn)其每一位。0變?yōu)?,1變?yōu)?。例如:
0 1 operand1 ---------- 1 0 ~ operand1
int a = 103; // binary: 0000000001100111 int b = ~a; // binary: 1111111110011000 = -104
看到此操作的結(jié)果為一個負數(shù):-104,你可能會感到驚訝,這是因為一個整型變量的最高位是所謂的符號位。如果最高位為1,該整數(shù)被解釋為負數(shù)。這里正數(shù)和負數(shù)的編碼被稱為二進制補碼。欲了解更多信息,請參閱維基百科條目:補碼。
順便說一句,值得注意的是,對于任何整數(shù)x, ~x 與 -x-1 相等。
有時候,符號位在有符號整數(shù)表達式中能引起一些不期的意外。