版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1第11章位運(yùn)算位運(yùn)算簡介位賦值運(yùn)算符位段應(yīng)用舉例23.位運(yùn)算有:
“按位與”運(yùn)算“按位或”運(yùn)算“異或”運(yùn)算“取反”運(yùn)算左移運(yùn)算右移運(yùn)算11.1位運(yùn)算簡介
1.位運(yùn)算和指針一樣,都是C語言的重要特色。
2.位運(yùn)算的概念:
所謂位運(yùn)算,是指進(jìn)行二進(jìn)制位的運(yùn)算。例如:將一個(gè)存儲(chǔ)單元中的各二進(jìn)制位左移或右移1位,兩個(gè)數(shù)按位相加等。位運(yùn)算符含義舉例&按位與a&b|按位或a|b∧按位異或a∧b~按位取反~a<<左移a<<1>>右移b>>23
位賦值運(yùn)算符是位運(yùn)算符與賦值運(yùn)算符的結(jié)合。位賦值運(yùn)算符含義舉例等同于&=位與賦值a&=ba=a&b|=位或賦值a|=ba=a|b∧=位異或賦值a∧=ba=a∧b<<=左移賦值a<<=ba=a<<b>>=右移賦值a>>=ba=a>>b11.2位賦值運(yùn)算符4
C語言允許在一個(gè)結(jié)構(gòu)體中以位為單位來指定其成員所占的內(nèi)存長度,這種以位為單位的成員稱為“位段”或“位域”。“位段”或“位域”是一種特殊的結(jié)構(gòu)體成員。
11.3位段定義的一般格式如下:struct結(jié)構(gòu)體名{
類型成員1:長度;
類型成員2:長度;…
類型成員n:長度;};其中,冒號(hào)前的成員為位段,冒號(hào)后的長度表示存儲(chǔ)位段需要占用字節(jié)的位數(shù)。5例如:structdevice{unsigneda:1;unsignedb:2;unsignedc:4;shortx;floaty;}data;11.3位段結(jié)構(gòu)體變量data包含5個(gè)成員,它們分別是a、b、c、x、y。其中,a、b、c為位段,分別占用1位、2位、4位,即a、b、c共占用7位。這樣,用一個(gè)字節(jié)就可以存儲(chǔ)這3個(gè)位段。x、y為基本類型的成員,分別需要2個(gè)、4個(gè)字節(jié)存儲(chǔ)。因此,結(jié)構(gòu)體變量data需要占用7個(gè)字節(jié)的內(nèi)存單元。上圖給出了結(jié)構(gòu)體變量data的每個(gè)成員在內(nèi)存中的分配情況。
14211個(gè)字節(jié)2個(gè)字節(jié)4個(gè)字節(jié)xycba1632610.4應(yīng)用舉例
程序:main(){intnum,bit,i;unsignedtest=0x8000;printf("inputmum:");scanf("%d",&num);printf("binaryof%xis:",num);for(i=1;i<=16;i++){bit=((num&test)==0)?0:1;printf("%d",bit);test>>=1;}}
運(yùn)行結(jié)果:inputnum:12345↙binaryof3039is:0011000000111001例1輸出一個(gè)整數(shù)的二進(jìn)制形式。710.4應(yīng)用舉例
題目分析:①利用某位與1進(jìn)行異或可將該位翻轉(zhuǎn)的特性,設(shè)置一個(gè)掩碼mask,mask中的數(shù)據(jù)最好不能從鍵盤上直接輸入,以避免mask碰巧與源碼(輸入的字符串)相同、進(jìn)行按位“異或”運(yùn)算、結(jié)果為0、無法進(jìn)行加密和解密的情況(如"123abc"∧"123abc"=0)。為此,查ASCII字符編碼一覽表(附錄A),選取mask="\x14\x15"。②上面的\x14和\x15的十進(jìn)制分別是20和21,分別代表?和§,它們無法從鍵盤上直接輸入。其二進(jìn)制分別為:0000000000010100和0000000000010101。③編寫strencrypt函數(shù)。該函數(shù)有兩個(gè)形參:一個(gè)是源碼——要加密/解密的字符串,一個(gè)是掩碼——加密使用的mask。使用循環(huán)結(jié)構(gòu)將需要加密/解密的字符串不斷與掩碼mask的對(duì)應(yīng)二進(jìn)制位進(jìn)行多輪次的按位“異或”運(yùn)算,直到加密/解密的字符串結(jié)束,完成字符串的加密/解密。
例2編寫一函數(shù),實(shí)現(xiàn)字符串(例如用戶使用的密碼)的加密和解密。810.4應(yīng)用舉例
程序:#include"stdio.h"#defineMASK"\x14\x15" /*定義一個(gè)加密/解密的mask*/char*strencrypt(charstr[],charmask[])/*對(duì)字符串進(jìn)行加密/解密*/{inti,j;for(i=0;str[i]!=0;) /*循環(huán)到加密/解密字符串結(jié)束*/for(j=0;str[i]!=0&&mask[j];j++,i++)/*循環(huán)到加密/解密字符串或mask字符串結(jié)束*/{str[i]=str[i]^mask[j]; /*按位“異或”*/}return(str);}main(){charstr[80];printf("Inputastring:");scanf("%s",str); /*輸入一個(gè)要加密/解密的字符串*/strencrypt(str,MASK); /*加密*/printf("Encryptstringis:%s\n",str); /*輸出加密后的字符串*/strencrypt(str,MASK); /*解密*/printf("ReEncryptstringis:%s\n",str); /*輸出解密后的字符串*/}運(yùn)行結(jié)果:Inputastring:ac#@^
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度勞動(dòng)合同糾紛上訴處理合同
- 二零二五年度網(wǎng)絡(luò)文學(xué)圖文插畫制作合同
- 2025年度高端醫(yī)療專家聘用合同版
- 二零二五年度化妝品美容院合作經(jīng)營與管理合同
- 二零二五年度商鋪?zhàn)赓U及租賃期滿后續(xù)租優(yōu)先權(quán)合同
- 二零二五年度環(huán)境合同翻譯與環(huán)保合規(guī)合同
- 2024戶外廣告牌制作合同范本
- 2024服務(wù)項(xiàng)目戰(zhàn)略合作框架合同
- 2024簡單貨物運(yùn)輸合同范本私人
- 2024版地基土地開發(fā)與交易合同協(xié)議3篇
- 《太陽能光伏技術(shù)》課件
- 2024年職業(yè)素養(yǎng)與商務(wù)禮儀培訓(xùn)資料
- 外科醫(yī)生年終述職總結(jié)報(bào)告
- 兒科課件:急性細(xì)菌性腦膜炎
- 柜類家具結(jié)構(gòu)設(shè)計(jì)課件
- 建設(shè)項(xiàng)目管理費(fèi)用(財(cái)建2016504號(hào))
- 煤炭運(yùn)輸安全保障措施提升運(yùn)輸安全保障措施
- JTGT-3833-2018-公路工程機(jī)械臺(tái)班費(fèi)用定額
- LDA型電動(dòng)單梁起重機(jī)參數(shù)
- 保安巡邏線路圖
- (完整版)聚乙烯課件
評(píng)論
0/150
提交評(píng)論