位運(yùn)算符

按位運(yùn)算符有6個(gè)

& 按位與????????| 按位或????????^按位異或????????~取反????????>>右移????????<<左移


1 、& 運(yùn)算符


&是二元運(yùn)算符,它以特定的方式的方式組合操作數(shù)中對(duì)應(yīng)的位 如果對(duì)應(yīng)的位都為1,那么結(jié)果就是1, 如果任意一個(gè)位是0 則結(jié)果就是0

1 & 3的結(jié)果為1

來(lái)看看它的怎么運(yùn)行的:

1的二進(jìn)制表示為 0 0 0 0 0 0 1

3的二進(jìn)制表示為 0 0 0 0 0 1 1

根據(jù) & 的規(guī)則 得到的結(jié)果為 0 0 0 0 0 0 0 1,十進(jìn)制表示就是1

只要任何一位是0 &運(yùn)算的結(jié)果就是 0,所以可以用&把某個(gè)變量不必要的位設(shè)為0, 比如某個(gè)變量的二進(jìn)制表示為 0 1 0 0 1 0 0 1, 我想保留低4位,消除高4位 用 & 0x0F就可以了(注:0x0F為16進(jìn)制表示法,對(duì)應(yīng)的二進(jìn)制為 0 0 0 0 1 1 1 1),這個(gè)特性在編碼中使用很廣泛。


2 、| 運(yùn)算符


如果對(duì)應(yīng)的位中任一個(gè)操作數(shù)為1 那么結(jié)果就是1

1 | 3 的結(jié)果為3


3、 ^ 運(yùn)算符


^ 運(yùn)算符跟 | 類似,但有一點(diǎn)不同的是 如果兩個(gè)操作位都為1的話,結(jié)果產(chǎn)生0

0 1 0 0 0 0 0 1

0 1 0 1 1 0 1 0

產(chǎn)生 0 0 0 1 1 0 1 1


4 、~ 運(yùn)算符


~是對(duì)位求反 1變0, 0變1


5 、移位運(yùn)算符移位運(yùn)算符把位按指定的值向左或向右移動(dòng)


<< 向左移動(dòng) 而 >> 向右移動(dòng),超過(guò)的位將丟失,而空出的位則補(bǔ)0

如 0 1 0 0 0 0 1 1(十進(jìn)制67) 向左移動(dòng)兩位67<<2將變成

0 0 0 0 1 1 0 0 (十進(jìn)制12)當(dāng)然如果你用java代碼寫(xiě),由于是32位,不會(huì)溢出,結(jié)果是268

向右移動(dòng)兩位67>>2則是

0 0 0 1 0 0 0 0(十進(jìn)制16)


一些具體的應(yīng)用


前面提到2向前移動(dòng)1位變成4 利用這個(gè)特性可以做乘法運(yùn)算(在不考慮溢出和符號(hào)位的情況下)

2 << 1 =4

3 << 1 = 6

4 << 1 = 8

同理 >> 則可以做除法運(yùn)算

任何小數(shù) 把它 >> 0可以取整

如3.14159 >> 0 = 3;

^運(yùn)算服有個(gè)神奇的特性

如以下代碼

————————————————

int n1=3;

int n2=4;

n1 ^= n2;

n2 ^= n1;

n1 ^= n2

————————————————

最后我們發(fā)現(xiàn),n1=4,n2=3,兩者互換了值


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容