版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第8章位操作程序設計8.1位運算符8.2位域8.3位操作程序設計綜合舉例8.1位運算符6種位運算符位與&位或|位異或^位取反~位左移<<位右移>>位運算的操作數為整型(char,short,int,long),運算結果是整型。8.1位運算符8.1位運算符1.按位與&參與運算的兩個值,如果兩個相應位都為1,則該位的結果為1,否則為0。即:0&0=0,0&1=0,1&0=0,1&1=1例如:
8.1位運算符1.按位與&用來對操作數中的若干位置0,或者取操作數中的若干指定位。例如:charx;(1)將x的第4位和第1位置0,11110110x=x&0xf6;
掩碼0xf6的b3=0,b0=0(2)取x的低4位:x=x&0x0f;掩碼0x0f的b7b6b5b4=0000b3b2b1b0=1111
8.1位運算符2.按位或|參與運算的兩個值,只要兩個相應位中有一個為1,則該位的結果為1。即:0|0=0,0|1=1,1|0=1,1|1=1例如:
8.1位運算符2.按位或|用來把操作數的某些特定位置1.例如:將int型的變量a的b3、b4位置1:a=a|0x18掩碼:00011000
8.1位運算符3
.按位異或^
參與運算的兩個值,如果兩個相應位不同,則結果為1,否則為0。
即:0^0=0,1^0=1,0^1=1,1^1=0例如:8.1位運算符3.按位異或^使某些特定的位翻轉。如果是某位與0異或,結果是該位的原值;如果是某位與1異或,則結果與該位原來的值相反。例如:要使11010110的b4、b5翻轉將數與00011000進行按位異或運算。11010110^00011000
110011108.1位運算符4.按位取反~一元運算法,對數據的每個二進制位取反.
即把1變?yōu)?,把0變?yōu)?例如:8.1位運算符5.移位<<>>(1)左移運算(<<)將一個數的各個二進位全部左移若干位。左移后,低位補0,高位舍棄。一個無符號數,左移一位相當于乘以2.(2)右移運算(>>)將一個數的各二進制位全部右移若干位。右移后,低位舍棄;高位:若是無符號數,補0;若是有符號數,補“符號位”。一個無符號數,右移一位相當于除2取商.
8.1位運算符5.移位<<>>某一變量所包含的各二進位按指定的方向移動指定的位.例8-1位運算的應用voidmain(){ unsignedintw1=0x155,w2=0x1c7,w3=0x52; intw4=-128,w5=128; printf("%x%x%x\n",w1&w2,w1|w2,w1^w2); printf("%x%x%x\n",~w1,~w2,~w3); printf("%x%x%x\n",w1^w2,w1&~w2,w1|w2|w3); printf("%x%x\n",w1|w2&w3,w1&w2|w3);printf("%x%x\n",~(~w1&~w2),w1|w2);
printf("%d%d\n",w4>>1,w5<<1);}8.2位域BitField有些信息在存儲時,并不需要占用一個完整的存儲單元,而只需一個或幾個二進制位。例如,存放一個開關量時,只有0和1兩種狀態(tài),只要用一個二進位即可。位域:把一個存儲單元中的二進制劃分為幾個不同的區(qū)域,并說明每個區(qū)域的位數。每一個域有一個域名,允許在程序中按域名進行操作。8.2位域位域的聲明形式:struct結構體名{
類型1成員1:長度;
類型2成員2:長度;
…
類型n成員3:長度;}位域變量;8.2位域例如:structBitSeg1{
unsignedchara:4;
unsignedcharb:3;unsignedcharc:1;}flags;聲明位域變量flags由三個成員a、b、c組成,a占有4bits,b占有3bits,c占有1bits,整個變量flags分配的存儲單元大小為char類型的存儲單元,大小為1Byte。8.2位域例如:structBitSeg2{unsignedcharf1:1;unsignedcharf2:1;unsignedcharf3:1;unsignedcharf4:3;unsignedcharf5:7;
//從第二個char型的存儲單元分配成員f5};聲明的結構類型structBitSeg2占用的空間大小為2Bytes。其中成員f1、f2、f3、f4占用第一字節(jié),f5占用第二字節(jié)。例8-2位域的應用。typedefstruct{unsignedcharf1:1;unsignedcharf2:1;unsignedcharf3:1;unsignedchartype:4;unsignedcharindex:8;}Flags;voidmain(){Flagsflags;flags.f1=1;flags.f2=0;flags.f3=1;flags.type=0x7;flags.index=0x81;printf("%x%x%x%1x%2x\n",flags.f1,flags.f2,flags.f3,flags.type,flags.index);
printf("Thesizeofvariableflagsis%d\n",sizeof(flags));}101781Thesizeofvariableflagsis28.3位操作程序設計綜合舉例例8-3將一個無符號八位二進制數的低4位與高4位進行交換,并以十六進制格式輸出原數和交換后的結果。#include<stdio.h>voidmain(){ unsignedcharflag1=0x8f; unsignedcharflag2,flag3,flag4; flag2=flag1&0x0f;//屏蔽高4位后,將低4位送給flag2 flag2=flag2<<4;//將低4位移到高4位
flag3=flag1&0xf0;//屏蔽低4位后,將高4位送給flag3flag3>>=4;//將高4位移到低4位
flag4=flag2|flag3; printf("%x\n",flag1); printf("%x\n",flag4);}8ff8例8-4編寫一個帶參數的宏clearBit(x,n),用于將x的第n位置0,假設n>=0。#include<stdio.h>//~(0x1<<n)是第n位是1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 空白貨物運輸合同書
- 2024年度門面租賃合同糾紛
- 2024年影視作品制作與發(fā)行分包合同
- 2024中外合資企業(yè)教育培訓與經營合同書
- 2024廣州市房地產中介服務合同(賣方出租方使用)
- 2024個人民間借款合同范例
- 2024年信息安全保密協(xié)議
- 2024年合伙人分伙協(xié)議書
- 2024果樹苗木定購合同范本
- 跨境電商商品銷售合同
- 2023年合肥高新建設投資集團公司招聘筆試題庫及答案解析
- 初中數學北師大七年級下冊第三章三角形北師大版-探索三角形全等的條件PPT
- 意大利的工業(yè)設計史課件
- 第四講大學生就業(yè)權益及其法律保障課件
- 污水處理站安全培訓課件
- 公司工程碩士、博士聯(lián)合培養(yǎng)管理辦法
- 醫(yī)院優(yōu)質服務考核表
- 東北大學考試《結構力學ⅠX》考核作業(yè)參考324
- 《鄉(xiāng)土中國》之《名實的分離》-統(tǒng)編版高中語文必修上冊
- 戶外廣告牌施工方案53621
- 反假貨幣-外幣理論考試題庫(含答案)
評論
0/150
提交評論