(一)按位與&
兩位全為1,結(jié)果才為1
0&0=0榨惠;0&1=0;1&0=0;1&1=1
例如:51&5 即0011 0011 & 0000 0101 =0000 0001 因此51&5=1.
特殊用法
(1)清零笨觅。如果想將一個(gè)單元清零,即使其全部二進(jìn)制位為0耕腾,只要與一個(gè)各位都是零的數(shù)值相與见剩,結(jié)果為零。
(2)取一個(gè)數(shù)中指定位扫俺。
例如:設(shè)X=10101110苍苞,取X的低四位,用X&0000 1111=0000 1110即可得到狼纬。
方法:找一個(gè)數(shù)羹呵,對(duì)應(yīng)x要取的位,該數(shù)的對(duì)應(yīng)位為1疗琉,其余位為零冈欢,此數(shù)與x進(jìn)行“與運(yùn)算”可以得到x中的指定位。
(二)按位或 |
只要有一個(gè)為1没炒,結(jié)果就為1涛癌。
0|0=0; 0|1=1送火;1|0=1拳话;1|1=1;
例如:51|5 即0011 0011 | 0000 0101 =0011 0111 因此51|5=55
特殊用法
常用來對(duì)一個(gè)數(shù)據(jù)的某些位置1种吸。
方法:找到一個(gè)數(shù)弃衍,對(duì)應(yīng)x要置1的位,該數(shù)的對(duì)應(yīng)位為1坚俗,其余位為零镜盯。此數(shù)與x相或可使x中的某些位置1。
(三)異或 ^
兩個(gè)相應(yīng)位為“異”(值不同)猖败,則該位結(jié)果為1速缆,否則為0
0^0=0; 0^1=1; 1^0=1; 1^1=0;
例如:51^5 即0011 0011 ^ 0000 0101 =0011 0110 因此51^5=54
特殊用法
(1) 與1相異或,使特定位翻轉(zhuǎn)
方法:找一個(gè)數(shù)恩闻,對(duì)應(yīng)X要翻轉(zhuǎn)的位艺糜,該數(shù)的對(duì)應(yīng)為1,其余位為零,此數(shù)與X對(duì)應(yīng)位異或即可破停。
例如:X=1010 1110翅楼,使X低四位翻轉(zhuǎn),用X^0000 1111=1010 0001即可得到真慢。
(2) 與0相異或毅臊,保留原值
例如:X^0000 0000 =1010 1110
(3)兩個(gè)變量交換值
1.借助第三個(gè)變量來實(shí)現(xiàn)
C=A;A=B;B=C;
2.利用加減法實(shí)現(xiàn)兩個(gè)變量的交換
A=A+B;B=A-B;A=A-B;
3.用位異或運(yùn)算來實(shí)現(xiàn),也是效率最高的
原理:一個(gè)數(shù)異或本身等于0 黑界;異或運(yùn)算符合交換律
A=AB;B=AB;A=A^B
(四)取反與運(yùn)算~
對(duì)一個(gè)二進(jìn)制數(shù)按位取反管嬉,即將0變?yōu)?,1變0
~1=0 园爷;~0=1
(五)左移<<
將一個(gè)運(yùn)算對(duì)象的各二進(jìn)制位全部左移若干位(左邊的二進(jìn)制位丟棄宠蚂,右邊補(bǔ)0)
例如: 2<<1 =4 10<<1=100
若左移時(shí)舍棄的高位不包含1,則每左移一位童社,相當(dāng)于該數(shù)乘以2。
例如:
11(1011)<<2= 0010 1100=22
11(00000000 00000000 00000000 1011)整形32bit
(六)右移>>
將一個(gè)數(shù)的各二進(jìn)制位全部右移若干位著隆,正數(shù)左補(bǔ)0扰楼,負(fù)數(shù)左補(bǔ)1,右邊丟棄美浦。若右移時(shí)舍高位不是1(即不是負(fù)數(shù))弦赖,操作數(shù)每右移一位,相當(dāng)于該數(shù)除以2浦辨。
左補(bǔ)0還是補(bǔ)1得看被移數(shù)是正還是負(fù)蹬竖。
例如:4>>2=4/2/2=1
-14(即1111 0010)>>2 =1111 1100=-4