1. 位操作符
位操作符屬于操作符中比較難的內(nèi)容,位操作符以二進(jìn)制為單位進(jìn)行運(yùn)算,操作的對(duì)象以及結(jié)果都是整數(shù)型。位操作符有如下幾個(gè):&(按位與)、|(按位或)、^(按位異或)、~(按位取反)、>>(右位移)和<<(左位移)。
具體說(shuō)明看下表:
運(yùn)算符 | 名稱 | 例子 | 功能 |
& | 按位與 | A&B | A和B進(jìn)行位與運(yùn)算 |
| | 按位或 | A|B | A和B進(jìn)行位或運(yùn)算 |
~ | 按位取反 | ~A | A進(jìn)行取反運(yùn)算 |
^ | 按位異或 | A^B | A和B進(jìn)行位異或運(yùn)算 |
>> | 右位移 | A>>c | A右移c位 |
<< | 左位移 | A<<c | A左移c位 |
依此介紹一下各種位運(yùn)算。
1)位與運(yùn)算(A&B)
位與運(yùn)算中,A和B按位進(jìn)行與運(yùn)算,當(dāng)每位對(duì)應(yīng)全是1的時(shí)候?qū)?yīng)結(jié)果位1,反之為0
1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 |
0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 |
0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 |
可以看出,當(dāng)10111001&00100011得到00100011。當(dāng)對(duì)應(yīng)位同時(shí)為1才為1。
2)位或運(yùn)算(A|B)
1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
0 | 1 | 0 | 1 | 1 | 1 | 1 | 0 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
可以看出,當(dāng)10110010 | 01011110得到11111110,對(duì)應(yīng)位置存在一個(gè)1的時(shí)候即為1。
3)異或位運(yùn)算(A^B)
1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
0 | 1 | 0 | 1 | 1 | 1 | 1 | 0 |
1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 |
可以看出,10110010^01011110得到11101100,對(duì)應(yīng)位置相反的時(shí)候,即0對(duì)應(yīng)1,1對(duì)應(yīng)0的時(shí)候得到1。
4)按位取反運(yùn)算(~A)
0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
按位取反的過(guò)程中需要運(yùn)用補(bǔ)碼運(yùn)算,即0補(bǔ)為1,1補(bǔ)為0。
5)左右位移
右移時(shí),(第一行為移動(dòng)前,第二行為移動(dòng)后)
0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | |
0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
右邊最低位為溢出位被丟棄,在填充左側(cè)最高位時(shí),如果最高位是0,則填0,如果最高位是1,則填1。右移相當(dāng)于除上2的n次方。
左移時(shí), (第一行為移動(dòng)前,第二行為移動(dòng)后)
0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | |
0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 |
左邊最高位為溢出位被丟棄,在最右邊空位補(bǔ)0,左移相當(dāng)于乘上2的n次方。
這章內(nèi)容帶領(lǐng)大家深入了解計(jì)算機(jī)世界的0和1,可以選擇性去掌握了解,最后來(lái)介紹一下運(yùn)算符的優(yōu)先級(jí),在算法運(yùn)算時(shí)遇到操作符優(yōu)先級(jí)問(wèn)題的時(shí)候可以參考此表格。
由低到高 | <、>、<=、>=、!=、== |
| | |
^ | |
& | |
<<、>> | |
+、- | |
*、/、%、// | |
~、+、- | |
** |
這一章內(nèi)容比較抽象,可以反復(fù)閱讀去掌握它的內(nèi)容,下一節(jié)我們學(xué)習(xí)Python的控制結(jié)構(gòu)。
C語(yǔ)言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競(jìng)賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會(huì)寫(xiě)的:零基礎(chǔ)C語(yǔ)言學(xué)練課程
解決困擾你多年的C語(yǔ)言疑難雜癥特性的C語(yǔ)言進(jìn)階課程
從零到寫(xiě)出一個(gè)爬蟲(chóng)的Python編程課程
只會(huì)語(yǔ)法寫(xiě)不出代碼?手把手帶你寫(xiě)100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程