“位非”的版本間的差異
來(lái)自ALSROBOT WiKi
(以“按位取反(~)<br> 在C++中按位取反運(yùn)算符為波浪符“~”。不像“&”和“|”,按位取反運(yùn)算符應(yīng)用于其右側(cè)的單個(gè)操作數(shù)。...”為內(nèi)容創(chuàng)建頁(yè)面) |
2014年9月12日 (五) 13:34的最后版本
按位取反(~)
在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ù)的編碼被稱為二進(jìn)制補(bǔ)碼。欲了解更多信息,請(qǐng)參閱維基百科條目:補(bǔ)碼。
順便說(shuō)一句,值得注意的是,對(duì)于任何整數(shù)x, ~x 與 -x-1 相等。
有時(shí)候,符號(hào)位在有符號(hào)整數(shù)表達(dá)式中能引起一些不期的意外。