![第十二章 位的運算_第1頁](http://file4.renrendoc.com/view12/M00/0D/11/wKhkGWeN5liANfNxAAKiBzOFOLI945.jpg)
![第十二章 位的運算_第2頁](http://file4.renrendoc.com/view12/M00/0D/11/wKhkGWeN5liANfNxAAKiBzOFOLI9452.jpg)
![第十二章 位的運算_第3頁](http://file4.renrendoc.com/view12/M00/0D/11/wKhkGWeN5liANfNxAAKiBzOFOLI9453.jpg)
![第十二章 位的運算_第4頁](http://file4.renrendoc.com/view12/M00/0D/11/wKhkGWeN5liANfNxAAKiBzOFOLI9454.jpg)
![第十二章 位的運算_第5頁](http://file4.renrendoc.com/view12/M00/0D/11/wKhkGWeN5liANfNxAAKiBzOFOLI9455.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
C語言程序設(shè)計課程回顧1、標(biāo)識符的定義規(guī)則?2、C語言的基本數(shù)據(jù)類型有哪些?3、運算符的類型及優(yōu)先級。任務(wù)生成加密秘鑰實例任務(wù)描述安全驗證2.0版本,為了進一步提計算機的安全性,希望程序員小王編寫一個加密口令驗證模塊,在進入計算機系統(tǒng)前,兩層保證用戶的合法性。如何實現(xiàn)呢?(利用位運算符)
相關(guān)知識
理解位運算:按位與、或、異或、取反、左移和右移第12章位運算
12.1位的運算
12.2位段學(xué)習(xí)目標(biāo)掌握位運算符的概念熟練應(yīng)用常用的位運算12.1位的運算運算符名稱使用格式運算符名稱使用格式&按位與表達式1&表達式2~按位取反~表達式|按位或表達式1|表達式2<<按位左移表達式1<<表達式2∧按位異或表達式1∧表達式2>>按位右移表達式1>>表達式2說明:(1)位運算符中除位取反以外,均為雙目運算符,即運算符兩側(cè)各有一個表達式(運算量)。(2)表達式1、2都只能是整型或字符型數(shù)據(jù)。(3)參與運算時,表達式1、2都必須首先轉(zhuǎn)換成二進制形式,然后再執(zhí)行相應(yīng)的按位運算。12.1位的運算基本形式12.1.1“按位與”運算符(&)與運算的基本格式為:a&b#include<stdio.h>intmain(){ inta=84,b=59,c; c=a&b; printf("a=%d\tb=%d\tc=%d\n",a,b,c); return0;}程序運行結(jié)果如下:a=84b=59c=1612.1.1按位與運算符(&)實例分析設(shè)a=84(二進制為01010100),把其中從左邊算起的第3,4,5,7,8位保留下來。12.1.1按位與運算符(&)基本形式12.1.2“按位或”運算符(|)或運算的基本格式為:a|b12.1.2按位或運算符(|)#include<stdio.h>intmain(){
inta=060;
intb=017;
intc;
c=a|b;
printf("a=%d\tb=%d\tc=%d\n",a,b,c);
return0;}程序運行結(jié)果如下:a=48b=15c=6312.1.2按位或運算符(|)實例分析將八進制60與八進制17進行按位或運算。基本形式12.1.3“異或”運算符(∧)異或運算的基本格式為:a∧b12.1.3異或運算符(∧)#include<stdio.h>intmain(){
inta=071;
intb=052;
intc;
c=a^b;
printf("a=%d\tb=%d\tc=%d\n",a,b,c);
return0;}程序運行結(jié)果如下:a=57b=42c=19實例分析將八進制721與八進制52進行按位異或運算。12.1.3異或運算符(∧)基本形式12.1.4“取反”運算符(~)取反運算的基本格式為:~
a12.1.4取反運算符(~)實例分析將八進制77進行按位取反運算。先將77(8)化成二進制111111(2)然后進行取反:~111111=00000012.1.4取反運算符(~)#include<stdio.h>intmain(){
inta=077;
printf("%d",~a);
return0;}程序運行結(jié)果如下:192基本形式12.1.5左移運算符(<<)左移運算的基本格式為:a<<n功能:左移運算符是用來將一個數(shù)的各二進制位左移若干位,移動的位數(shù)由右操作數(shù)指定(右操作數(shù)必須是非負值),其右邊空出的位用0填補,高位左移溢出則舍棄該高位。12.1.5左移運算符(<<)#include<stdio.h>intmain(){
inta=15;
printf("%d",a<<2);
return0;}程序運行結(jié)果如下:6012.1.5左移運算符(<<)實例分析若a=15,將a的二進制數(shù)左移2位。說明:左移1位相當(dāng)于該數(shù)乘以2,左移2位相當(dāng)于該數(shù)乘以2*2=4,15<<2=60,即乘了4?;拘问?2.1.6右移運算符(>>)右移運算的基本格式為:a>>n功能:右移運算符是用來將一個數(shù)的各二進制位右移若干位,移動的位數(shù)由右操作數(shù)指定(右操作數(shù)必須是非負值),移到右端的低位被舍棄,對于無符號數(shù),高位補0。對于有符號數(shù),取決于所使用的系統(tǒng):高位補0的稱為“邏輯右移”,高位補1的稱為“算術(shù)右移”。實例分析編寫程序?qū)崿F(xiàn)對-9右移1位的功能。分析:當(dāng)對負數(shù)進行右移操作,左端補1不補0。-9右移一位的過程如下:
①-9的原碼形式:1000000000001001最高位的1表示該數(shù)為負數(shù)
②-9的反碼形式:1000000000010110最高位不變,其余各位取反
③-9的補碼形式:1000000000010111對反碼加1
④右移1位-9>>1:10000000000110111擠掉右端1位,左端補1
⑤求-9>>1的反碼:1000000000011010對補碼減1而得
⑥求-9>>1的原碼:1000000000000101反碼最高位不變,其余取反因此,-9>>1的值由-9變?yōu)?5。12.1.6右移運算符(>>)12.1.6右移運算符(>>)#include<stdio.h>intmain(){
inta=-9,x=0;
x=a>>1;
printf("%d>>1=%d\n",a,x);
return0;}程序運行結(jié)果如下:-9>>1=-5學(xué)習(xí)目標(biāo)熟練位段的定義及使用方法12.2位段12.2位段相關(guān)概念(1)位段的定義與結(jié)構(gòu)體的定義相仿;格式如下:
struct位段結(jié)構(gòu)名
{類型說明符1位段名1:位段長度1;//最低位;類型說明符2位段名2:位段長度2;//次低位;類型說明符3位段名3:位段長度3;
......類型說明符N位段名N:位段長度M;//最高位;
};12.2位段相關(guān)概念(2)位段變量的說明與結(jié)構(gòu)體變量的說明方式相同;可采用兩種方式:
先定義后說明、同時定義說明;(3)位段變量的使用與結(jié)構(gòu)體變量的使用方法相同,有兩種形式:
變量:
位段變量名.位段名指針:
位段指針名->位段名12.2位段位段的存儲規(guī)則(1)如果相鄰的兩個位段字段的類型相同,且其位寬之和小于其類型的sizeof()大小,則其后面的位段字段將緊鄰前一個字段存儲,直到不能容納為止;
(2)如果相鄰的兩個位段字段的類型相同,且其位寬之和大于其類型的sizeof()大小,則后面的位段字段將從下一個存儲單元的起始地址處開始存放,其偏移量恰好為其類型的sizeof()大小的整數(shù)倍;(3)如果相鄰的兩個位段字段的類型不同,則各個編譯器的具體實現(xiàn)有差異,VC6采取不壓縮方式,GCC和Dev-C++都采用壓縮方式;12.2位段位段的存儲規(guī)則(4)如果位段字段之間穿插著非位段字段,則不進行壓縮;(5)整個位段結(jié)構(gòu)體的大小為其最寬基本類型成員大小的整數(shù)倍;(6)位段字段在內(nèi)存中的位置是按照從低位向高位的順序放置的;(7)取地址操作符&不能應(yīng)用在位段字段上;12.2位段實例分析編寫程序輸出各個位段的值。12.2位段程序運行結(jié)果如下:1,7,150,3,15 pbit->a=0; pbit->b&=3; pbit->c|=1; printf("%d,%d,%d\n",pbit->a,pbit->b,pbit->c); return0;}#include<stdio.h>intmain(){
structcbit
{
unsigneda:1;
unsignedb:3;
unsignedc:4;
}bit,*pbit;
bit.a=1;
bit.b=7;
bit.c=15;
printf("%d,%d,%d\n",bit.a,bit.b,bit.c);
pbit=&bit;小型案例問題:
對一無符號整數(shù)x進行右循環(huán)移y位后再取
其從右端開始的m—n位。小型案例分析:
第一步:將無符號整數(shù)x進行右循環(huán)移y位。無符號整數(shù)x右循環(huán)移y位后,x中原來左面(16-y)位右移y位,原來右端y位移至最左面y位?,F(xiàn)系統(tǒng)設(shè)用2個字節(jié)存放一個無符號整數(shù)。分析:
第二步:取其從右端開始的m—n位。小型案例代碼:小型案例小型案例【例】數(shù)據(jù)加解密文件。#include<stdio.h>main(){intcode,password,login;printf("請輸入口令密碼:");scanf("%d",&code);password=code>
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 上海市標(biāo)準(zhǔn)租賃合同樣本
- 中外房屋租賃合同樣本
- 個人與雇主家政服務(wù)合同
- 鄉(xiāng)村振興項目裝修合同
- 不可撤銷貸款合同范文
- 三人合作房地產(chǎn)開發(fā)合同范本(版)
- 個人貨車租賃標(biāo)準(zhǔn)合同樣本
- 世界游泳錦標(biāo)賽服務(wù)合同
- 二手房購買合同樣本集錦
- LED租賃服務(wù)合同范本
- 【大學(xué)課件】機電設(shè)備管理技術(shù)概論
- (2024)甘肅省公務(wù)員考試《行測》真題及答案解析
- 醫(yī)院醫(yī)務(wù)人員醫(yī)德考評標(biāo)準(zhǔn)
- 小紅書種草營銷師(初級)認(rèn)證考試真題試題庫(含答案)
- 癲癇病人的護理(課件)
- 企業(yè)資產(chǎn)管理培訓(xùn)
- 2024年WPS計算機二級考試題庫350題(含答案)
- 2024年4月27日浙江省事業(yè)單位招聘《職業(yè)能力傾向測驗》試題
- 2024年6月浙江省高考地理試卷真題(含答案逐題解析)
- 醫(yī)院培訓(xùn)課件:《如何撰寫護理科研標(biāo)書》
- 河南省鄭州市2023-2024學(xué)年高二上學(xué)期期末考試 數(shù)學(xué) 含答案
評論
0/150
提交評論