《C語言程序設計實用教程》課件第8章 位操作程序設計_第1頁
《C語言程序設計實用教程》課件第8章 位操作程序設計_第2頁
《C語言程序設計實用教程》課件第8章 位操作程序設計_第3頁
《C語言程序設計實用教程》課件第8章 位操作程序設計_第4頁
《C語言程序設計實用教程》課件第8章 位操作程序設計_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論