位非

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

按位取反(~)

在C++中按位取反運(yùn)算符為波浪符“~”。不像“&”和“|”,按位取反運(yùn)算符應(yīng)用于其右側(cè)的單個(gè)操作數(shù)。按位取反操作會(huì)翻轉(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é)果為一個(gè)負(fù)數(shù):-104,你可能會(huì)感到驚訝,這是因?yàn)橐粋€(gè)整型變量的最高位是所謂的符號(hào)位。如果最高位為1,該整數(shù)被解釋為負(fù)數(shù)。這里正數(shù)和負(fù)數(shù)的編碼被稱(chēng)為二進(jìn)制補(bǔ)碼。欲了解更多信息,請(qǐng)參閱維基百科條目:補(bǔ)碼。


順便說(shuō)一句,值得注意的是,對(duì)于任何整數(shù)x, ~x 與 -x-1 相等。


有時(shí)候,符號(hào)位在有符號(hào)整數(shù)表達(dá)式中能引起一些不期的意外。