高級語言程序設(shè)計 位運算_第1頁
高級語言程序設(shè)計 位運算_第2頁
高級語言程序設(shè)計 位運算_第3頁
高級語言程序設(shè)計 位運算_第4頁
高級語言程序設(shè)計 位運算_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第八章位運算

南因號船現(xiàn)代我有技東中芯

2004年5月制作

本章主要內(nèi)容

■c語言既是一種高級語言,廣泛應(yīng)用于應(yīng)用軟

件的開發(fā)和程序設(shè)計,同時又是一種低級語言,

可以用于系統(tǒng)軟件的開發(fā)和程序設(shè)計,如自動

控制系統(tǒng)中的過程控制、參數(shù)檢測、數(shù)據(jù)通訊

等控制程序,都可以綜合利用c語言中的指針

操作、位運算和位段技術(shù)來實現(xiàn)。

本章介紹位運算的基本形式和常用運算符,并

簡要介紹位段的概念。位運算的深入學(xué)習(xí),應(yīng)

該在《計算機原理》和《匯編語言程序設(shè)計》

課程中進行。

莆田學(xué)院現(xiàn)代教育技術(shù)中心2004年5月

、位運算符和位運算

■位運算概述

所謂“位運算”,是指按二進制位進行運算。

?位運算的特點:運算按二進制逐位進行——沒

有借彳立和接彳立。

“位運算量:整型(int,short,unsiged,long)/字

符型(以補碼/ASCII碼形式存儲),不可為實

型。

?位運算符:P298表12.1

&1A???

莆田學(xué)院現(xiàn)代教育技術(shù)中心2004年5月

、位運算符和位運算

位運算符還可與賦值運算符相結(jié)合,進行位運

算賦值操作。如:

a&=b等價于a=a&b

a?=b等價于a=a?b

■注意:位運算時的數(shù)據(jù)類型為char/int,分析

時要化為二進制形式,但在程序中書寫及輸出

結(jié)果時仍為char/int。

莆田學(xué)院現(xiàn)代教育技術(shù)中心2004年5月

位運算符的使用

按位與&(均為1時方為1)

【例一】計算

main()010000(a)

&011000(b)

010000

unsignedchara,b;

printf(Tnteraandb:");001010(a)

&010000(b)

u,5

scanf(%o,%o,&a,&b);000000

printf(ua&b=%o\n55,a&b);

)

Enteraandb:20,30Enteraandb:12,20

a&b=20a&b=0

莆田學(xué)院現(xiàn)代教育技術(shù)中心2004年5月

位運算符的使用

按位或|(均為0時方為0)

【例二】計算

main()010000(a)

I011000(b)

011000

unsignedchara,b;

printf(Tnteraandb:");001010(a)

I010000(b)

u,5

scanf(%o,%o,&a,&b);011010

printf(ua|b=%o\n,,,a|b);

)

Enteraandb:20,30Enteraandb:12,20

a|b=30a|b=32

莆田學(xué)院現(xiàn)代教育技術(shù)中心2004年5月

位運算符的使用

按位異或八(二者相異方為1)

【例三】以下程序的功能是將。數(shù)據(jù)的低4位取反。

#include<stdio.h>

main()計算

(00111001(a)

unsignedchara=0x39,b=人00001111(b)

a=aAb;00110110

printf("%x\n",a);

答案:OxOf

莆田學(xué)院現(xiàn)代教育技術(shù)中心2004年5月

位運算符的使用

按位取反~(各位反轉(zhuǎn))

【例四】計算

main()~a:

(補碼:11111100

chara=3;原碼:10000100

intb=10;?b:

printf(''~a=%d,~b=%d\rT,~a「補碼

)原碼:10001011

結(jié)果:?a=-4,?b=Tl

莆田學(xué)院現(xiàn)代教育技術(shù)中心2004年5月

位運算符的使用

?左移運算?

a?n將a中各位向左移n位,右端補0,高位溢出丟棄。

例:

【例五】以下程序的運行結(jié)果是_____O

main()

(

unsignedinta=0x3ef,b;

b=a?2;

printf("%x,%x\n",a,b);

}

A)3ef,fbB)3ef,fbcC)fbc,3efD)fbc,fbc

莆田學(xué)院現(xiàn)代教育技術(shù)中心2004年5月

位運算符的使用

■左移運算?

計算

【例六】以下程序的運行結(jié)5已知:0x1f5為111110101

main()且:Ta為1100

???2<<3為1100000

inta=12,b;111110101

b=0x1f5&a?3;&001100000

printf("%d,%d\n"Ja,b);

}001100000=96

結(jié)果:12,96

莆田學(xué)院現(xiàn)代教育技術(shù)中心2004年5月

位運算符的使用

■右移運算?

a?n將a中各位右移n位,溢出則舍棄。

左端----

?a為正數(shù)時(符號位為0),填0;

aa為負數(shù)時(符號位為1),填?;蛱?與系統(tǒng)有關(guān)

填0(邏輯右移)

填1(算術(shù)右移)TC使用算術(shù)右移

莆田學(xué)院現(xiàn)代教育技術(shù)中心2004年5月

位運算符的使用

?右移運算?

【例七】以下程序的運行結(jié)果是_____

main()

(

inta=9,b=-9;

printf("%d,%d",a?2,b?2);

}

結(jié)果:2,-3

(-9的補碼:1111111111110111,

右移后為1111111111111101)o

莆田學(xué)院現(xiàn)代教育技術(shù)中心2004年5月

應(yīng)用示例

①從整數(shù)a最右端am=10n=3

[「IITIIIIllIIII[III

第m個位置開始[15|14|13|12|10|9|817|6|5|4|3|2|“0|

取該位開始右面b=a?(10-3+1)S!a?8

n位。jo|。|o|o|o|o|o|0I15I14I13I12I11I10I9|8|

算法如下:

-O?3

b=a?(m-n+1)I」「I」V「1”T”「I”。1。1。1

c=~(~O?n)c=*(*O?n)=~(*O?3)

_L------1

d=b&c「0|0|0|U|0巨|0|0|0|0|0|0|011I1I1I

注:位自右向左d=b&c

從0開始編號|o|o|o|o|o|o|o|o|o|o|o|u|u|io|9|8|

莆田學(xué)院現(xiàn)代教育技術(shù)中心2004年5月

應(yīng)用示例

莆田學(xué)院現(xiàn)代教育技術(shù)中心2004年5月

二、位段

c語言允許在一個結(jié)構(gòu)體中以位為單位來指定

其成員所占內(nèi)存長度。這種以位為單位的成員

稱為“位段”。

莆田學(xué)院現(xiàn)代教育技術(shù)中心2004年5月

示例

structdata

(

inti;/*非位段*/

unsignedinta:3;/*占3位*/

unsignedintb:5;/*占5位*/

unsignedint:3;/*無

溫馨提示

  • 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論