位非

來自ALSROBOT WiKi
跳轉(zhuǎn)至: 導(dǎo)航搜索

按位取反(~)

在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ù)表達式中能引起一些不期的意外。