《基于C語言的MCS-51單片機(jī)教程》 課件 第7次課 位運(yùn)算_第1頁
《基于C語言的MCS-51單片機(jī)教程》 課件 第7次課 位運(yùn)算_第2頁
《基于C語言的MCS-51單片機(jī)教程》 課件 第7次課 位運(yùn)算_第3頁
《基于C語言的MCS-51單片機(jī)教程》 課件 第7次課 位運(yùn)算_第4頁
《基于C語言的MCS-51單片機(jī)教程》 課件 第7次課 位運(yùn)算_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

位運(yùn)算一、位運(yùn)算符運(yùn)算符含義運(yùn)算符含義&按位與~取反|按位或<<

左移^按位異或>>

右移需要注意的是,只有整型數(shù)據(jù)或者字符型數(shù)據(jù)才能進(jìn)行位運(yùn)算,實型數(shù)據(jù)不能進(jìn)行位運(yùn)算。一、位運(yùn)算符1.“按位與”運(yùn)算符(&)按位與是指,參加運(yùn)算的兩個數(shù)據(jù),按二進(jìn)制位進(jìn)行“與”運(yùn)算。如果兩個相應(yīng)的二進(jìn)制位都為1,則該位的結(jié)果值為1;否則為0。0&0=00&1=01&0=01&1=1總結(jié):跟0相與為0,跟1相與保留應(yīng)用:若想對某些位清零,其余位不變,則需要跟對應(yīng)位是0,其余位是1的數(shù)相與一、位運(yùn)算符2.“按位或”運(yùn)算符(|)按位或是指,參加運(yùn)算的兩個數(shù)據(jù),按二進(jìn)制位進(jìn)行“或”運(yùn)算。如果兩個相應(yīng)的二進(jìn)制位都為0,則該位的結(jié)果值為0;否則為1。0&0=00&1=11&0=11&1=1

總結(jié):跟0相或保留,跟1相或置1應(yīng)用:若想讓某一位置1,跟對應(yīng)的位是1,其他位是0的數(shù)相或。11010000|0000111111011111一、位運(yùn)算符若要實現(xiàn)使發(fā)光二極管亮滅閃爍,則可以用以下語句實現(xiàn):while(1){P1=P1&0xfe;delay(200);P1=P1|0x01;delay(200);}一、位運(yùn)算符3.異或”運(yùn)算符(^)異或運(yùn)算符^也稱XOR運(yùn)算符。它的規(guī)則是:若參加運(yùn)算的兩個二進(jìn)制位同號則結(jié)果為0(假),異號則結(jié)果為1(真)。即:0^0=00^1=11^0=11^1=0總結(jié):跟1相異或翻轉(zhuǎn),跟0相異或保留應(yīng)用:(1)使特定位翻轉(zhuǎn)。所謂的翻轉(zhuǎn),就是把0變?yōu)?,把1變?yōu)?。一、位運(yùn)算符應(yīng)用:(2)交換兩個值,不用臨時變量例如:a=3,b=4。想將a和b的值互換,可以用以下賦值語句實現(xiàn):a=a^b;b=b^a;a=a^b;一、位運(yùn)算符若要實現(xiàn)使發(fā)光二極管亮滅閃爍,則可以用以下語句實現(xiàn):while(1){P1=P1^0x01;delay(200);}一、位運(yùn)算符4.“取反”運(yùn)算符(~)~是一個單目(元)運(yùn)算符,用來對一個二進(jìn)制數(shù)按位取反,即將0變1,將1變0。一、位運(yùn)算符若要實現(xiàn)使發(fā)光二極管亮滅閃爍,則可以用以下語句實現(xiàn):while(1){P1_0=~P1_0;delay(200);}一、位運(yùn)算符5.左移運(yùn)算符(<<)

左移運(yùn)算符是用來將一個數(shù)的各二進(jìn)制位全部向左移動若干位,高位左移后溢出,舍棄,低位填充0。

左移1位相當(dāng)于該數(shù)乘以2,左移2位相當(dāng)于該數(shù)乘以22=4,15<<2=60,即乘了4。一、位運(yùn)算符以下程序?qū)崿F(xiàn)了流水燈:voidmain() //主函數(shù){unsignedchari,w;while(1){w=0x01; //信號燈顯示字初值為01Hfor(i=0;i<8;i++){P1=~w; //顯示字取反后,送P1口delay(500); //延時w<<=1; //顯示字左移一位 }}}一、位運(yùn)算符6.右移運(yùn)算符(>>)

右移運(yùn)算符是用來將一個數(shù)的各二進(jìn)制位全部向右移動若干位,低位右移舍棄,對于無符號數(shù)來說高位填充0。

對于有符號的值,如果原來符號位為0(該數(shù)為正),則左邊也是移入0。如果符號位原來為1(即負(fù)數(shù)),則最高位移入0還是1,要取決于所用的計算機(jī)系統(tǒng)。有的系統(tǒng)移入0,有的系統(tǒng)移入1。移入0的稱為“邏輯右移”,即簡單右移;移入1的稱為“算術(shù)右移”。在單片機(jī)里,大多數(shù)使用無符號數(shù),故右移時最高位移入的是0。右移一位相當(dāng)于除以2,右移n位相當(dāng)于除以2n,但移出去的位不能為1。一、位運(yùn)算符voidmain() //主函數(shù){unsignedchari,w;while(1){w=0x80; //信號燈顯示字初值為01Hfor(i=0;i<8;i++){P1=~w; //顯示字取反后,送P1口delay(500); //延時w>>=1; //顯示字左移一位 }}}左移和右移可以看做8個人排隊。一、位運(yùn)算符7.復(fù)合賦值運(yùn)算符位運(yùn)算符與賦值運(yùn)算符可以組成復(fù)合賦值運(yùn)算符。例如:&=,|=,>>=,<<=,∧=

例:a&=b相當(dāng)于a=a&b

a<<=2相當(dāng)于a=a<<2二、位運(yùn)算的實際應(yīng)用序號功能示例位運(yùn)算1去掉最后一位00101101->00010110x>>12在最后加一個000101101->01011010x<<13在最后加一個100101101->01011011x<<1+14把最后一位變成100101100->00101101x|15把最后一位變成000101101->00101100x|1-16最后一位取反00101101->00101100x^17把右數(shù)第k位變成100101001->00101101,k=3x|(1<<(k-1))8把右數(shù)第k位變成000101101->00101001,k=3x&(~(1<<(k-1)))9右數(shù)第k位取反00101001->00101101,k=3x^(1<<(k-1))10取末三位01101101->101x&711取末k位01101101->1101,k=4x&(1<<k-1)12取右數(shù)第k位1101101->1,k=4x>>(k-1)&113把末k位變成100101001->00101111,k=4x|(1<<k-1)14末k位取反00101001->00100110,k=4x^(1<<k-1)15把右邊連續(xù)的1變成000101111->00100000x&(x+1)16把右起第一個0變成100101111->00111111x|(x+1)17把右邊連續(xù)的0變成111011000->11011111x|(x-1)18取右邊連續(xù)的1100101111->1111(x^(x+1))>>119去掉右起第一個1的左邊100101000-

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論