




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第10章章 位運算位運算l掌握基本位運算的形式掌握基本位運算的形式l掌握位運算的一般性計算方法掌握位運算的一般性計算方法 10.1 幾個基本概念幾個基本概念 l【問題】我們知道任何信息在計算機中都是以【問題】我們知道任何信息在計算機中都是以二進制形式表示,而我們日常生活中使用的是二進制形式表示,而我們日常生活中使用的是十進制,由于位運算是指進行二進制位的運算,十進制,由于位運算是指進行二進制位的運算,因此在學習位運算之前我們有必要了解與回顧因此在學習位運算之前我們有必要了解與回顧一下計算機內數(shù)據(jù)組織與存儲形式。一下計算機內數(shù)據(jù)組織與存儲形式。10.1.1 字節(jié)與位字節(jié)與位 l 字節(jié)byte是
2、計算機中的存儲單元。一個字節(jié)可以存放一個英文字母或符號,一個漢字通常要用兩個字節(jié)來存儲。每一個字節(jié)都有自己的編號,叫做“地址”。1個字節(jié)由8個二進制位位的英文是bit構成,每位的取值為0或1。最右端的那1位稱為“最低位”,編號為0;最左端的那1位稱為“最高位”,而且從最低位到最高位順序,依次編號。7 6 5 4 3 2 1 010.1.1 字節(jié)與位字節(jié)與位l我們把若干字節(jié)組成一個單元,叫做我們把若干字節(jié)組成一個單元,叫做“字字”(word)。一個字可以存放一個數(shù)據(jù)或指令。)。一個字可以存放一個數(shù)據(jù)或指令。至于一個字由幾個字節(jié)組成,取決于計算機的至于一個字由幾個字節(jié)組成,取決于計算機的硬件系統(tǒng)。
3、一般由硬件系統(tǒng)。一般由1個、個、2個或個或4個字節(jié)組成,個字節(jié)組成,所對應的計算機也被稱為所對應的計算機也被稱為“8位機、位機、16位機或位機或32位機位機”。目前微機以。目前微機以16位機或位機或32位機為主。位機為主。在本書中作為原理講述的是在本書中作為原理講述的是8位機。位機。10.1.2 原碼原碼 l把最高位留做表示符號,其他把最高位留做表示符號,其他7位表示二進制位表示二進制數(shù),這種編碼方式叫做原碼。最高位為數(shù),這種編碼方式叫做原碼。最高位為“0表示正數(shù),為表示正數(shù),為“1表示負數(shù)。例如:表示負數(shù)。例如:l00000011表示表示 +3l10000011表示表示 - 3l顯然,這樣可
4、以表示的數(shù)值范圍在顯然,這樣可以表示的數(shù)值范圍在+127到到-127之間。之間。l這種表示方法有一個缺陷,數(shù)值這種表示方法有一個缺陷,數(shù)值0會出現(xiàn)歧義:會出現(xiàn)歧義:l00000000表示表示 +0l10000000表示表示 - 010.1.3 反碼反碼 l對于正數(shù),反碼與原碼相同。例如:對于正數(shù),反碼與原碼相同。例如:l00000011表示表示 +3。l 所謂所謂“反碼是指與反碼是指與“原碼在表示負數(shù)時相原碼在表示負數(shù)時相反:符號位最高位為反:符號位最高位為“1表示負數(shù)。但其表示負數(shù)。但其余位的值相反。例如,余位的值相反。例如,11111100表示表示-3。顯然,。顯然,這樣可以表示的數(shù)值范圍
5、在這樣可以表示的數(shù)值范圍在+127到到-127之間。之間。l 這種表示方法仍然有一個缺陷,數(shù)值這種表示方法仍然有一個缺陷,數(shù)值0會出現(xiàn)歧會出現(xiàn)歧義:義:l00000000表示表示 +0l11111111表示表示 - 010.1.4 補碼補碼 l對于正數(shù),補碼與原碼相同。對于正數(shù),補碼與原碼相同。l0的補碼為的補碼為00000000。這樣,。這樣,0的表示唯一。的表示唯一。l對于負數(shù),可以從原碼得到補碼。步驟如下:對于負數(shù),可以從原碼得到補碼。步驟如下:l符號位不變符號位不變,其余各位取反;其余各位取反;l整個數(shù)加整個數(shù)加1。l已知補碼,求原碼:已知補碼,求原碼:l符號位不變符號位不變,其余各位
6、取反其余各位取反l整個數(shù)加整個數(shù)加1。10.1.4 補碼補碼l例如,已知補碼為例如,已知補碼為11111001,求原碼。,求原碼。l符號位為符號位為“1”,表示是一個負數(shù),所以該位不,表示是一個負數(shù),所以該位不變,仍為變,仍為“1”;l其余其余7位位1111001取反后為取反后為0000110;再加;再加1,所以是所以是10000111(-7)。l計算機中的數(shù)據(jù)都采用補碼。原因是計算機中的數(shù)據(jù)都采用補碼。原因是:l使用補碼,可以將符號位和其它位統(tǒng)一處理;使用補碼,可以將符號位和其它位統(tǒng)一處理;同時,減法也可按加法來處理。如同時,減法也可按加法來處理。如-3+4可以變可以變成成-3的補碼與的補碼
7、與+4的補碼相加的補碼相加l兩個用補碼表示的數(shù)相加時,如果最高位符兩個用補碼表示的數(shù)相加時,如果最高位符號位有進位,則進位被舍棄。號位有進位,則進位被舍棄。 10.2 位運算符和位運算位運算符和位運算 l位運算表位運算表10.2.1 按位取反按位取反 l【運算符】【運算符】【格式】【格式】x【功能】各位翻轉,即原來為【功能】各位翻轉,即原來為1的位變成的位變成0,原,原來為來為0的位變成的位變成1?!局饕猛尽块g接地構造一個數(shù),以增強程序【主要用途】間接地構造一個數(shù),以增強程序的可移植性。的可移植性?!纠纭咳纭纠纭咳鐇=83,y=x,則,則y=172。83(01010011) 83(010
8、10011) 172(10101100) 10.2.2 按位與按位與 【運算符】【運算符】&【格式】【格式】x&y【功能】當兩個操作對象二進制數(shù)的相同位都為【功能】當兩個操作對象二進制數(shù)的相同位都為1時,時,結果數(shù)值的相應位為結果數(shù)值的相應位為1,否則為相應位是,否則為相應位是0。【主要用途】取【主要用途】取(或保留或保留)1個數(shù)的某個數(shù)的某(些些)位,其余各位置位,其余各位置0。【例如】如【例如】如x=146,y=222,z=x&y,則,則z=146。10.2.3 按位或按位或 【運算符】【運算符】|【格式】【格式】x | y【功能】當兩個操作對象二進制數(shù)的相同位都為【功能】當兩個操作對象二
9、進制數(shù)的相同位都為0時,時,結果數(shù)值的相應位為結果數(shù)值的相應位為0,否則為相應位是,否則為相應位是1?!局饕猛尽繉ⅰ局饕猛尽繉?個數(shù)的某個數(shù)的某(些些)位置位置1,其余各位不變。,其余各位不變。【例如】如【例如】如x=146,y=222,z=x | y,則,則z=222。10.2.4 按位異或按位異或 【運算符】【運算符】【格式】【格式】x y【功能】當兩個操作對象二進制數(shù)的相同位的值相同時,【功能】當兩個操作對象二進制數(shù)的相同位的值相同時,結果數(shù)值的相應位為結果數(shù)值的相應位為0,否則為相應位是,否則為相應位是1?!局饕猛尽渴埂局饕猛尽渴?個數(shù)的某個數(shù)的某(些些)位翻轉位翻轉(即原來為
10、即原來為1的位變的位變?yōu)闉?,為,為0的變?yōu)榈淖優(yōu)?),其余各位不變。,其余各位不變。【例如】如【例如】如x=146,y=222,z=x y,則,則z=76 10.2.5 左位移左位移 【運算符】【運算符】 【格式】【格式】x要位移的位數(shù)要位移的位數(shù)【功能】把操作對象的二進制數(shù)向左移動指定【功能】把操作對象的二進制數(shù)向左移動指定的位,并在右面補上相應的的位,并在右面補上相應的0,高位溢出。,高位溢出。【例如】如【例如】如x=01010011,y=x 【格式】【格式】x要位移的位數(shù)要位移的位數(shù)【功能】把操作對象的二進制數(shù)向右移動指定的位,【功能】把操作對象的二進制數(shù)向右移動指定的位,移出的低位舍
11、棄;高位:移出的低位舍棄;高位:(1) 對無符號數(shù)和有符號中的正數(shù),補對無符號數(shù)和有符號中的正數(shù),補0;(2) 有符號數(shù)中的負數(shù),取決于所使用的系統(tǒng):補有符號數(shù)中的負數(shù),取決于所使用的系統(tǒng):補0的稱為的稱為“邏輯右移邏輯右移”,補,補1的稱為的稱為“算術右移算術右移”?!纠纭咳纭纠纭咳鐇=01010011,y=x2,則則y=00010100【注意】右移會引起數(shù)據(jù)的變化,具體說,右移一【注意】右移會引起數(shù)據(jù)的變化,具體說,右移一位相當于對原來的數(shù)值除以位相當于對原來的數(shù)值除以2。右移。右移n位相當于對原位相當于對原來的數(shù)值除以來的數(shù)值除以2 n說 明lx、y和和“位數(shù)等操作數(shù),都只能是整型或
12、字符型數(shù)據(jù)。位數(shù)等操作數(shù),都只能是整型或字符型數(shù)據(jù)。除按位取反為單目運算符外,其余均為雙目運算符。除按位取反為單目運算符外,其余均為雙目運算符。l參與運算時,操作數(shù)參與運算時,操作數(shù)x和和y都必須首先轉換成二進制形式,都必須首先轉換成二進制形式,然后再執(zhí)行相應的按位運算。例如:然后再執(zhí)行相應的按位運算。例如:l5220即即10125即即101001000101 。l 復合賦值運算符復合賦值運算符l除按位取反運算外除按位取反運算外,其余其余5個位運算符均可與賦值運算符一起個位運算符均可與賦值運算符一起,構成復合賦值運算符構成復合賦值運算符: &=、|+、=、=。例如,。例如,a & = b相當于
13、相當于 a = a & b。a =2相當于:相當于:a = a 2。l不同長度數(shù)據(jù)間的位運算不同長度數(shù)據(jù)間的位運算低字節(jié)對齊,短數(shù)的高字節(jié)按低字節(jié)對齊,短數(shù)的高字節(jié)按最高位補位:最高位補位:l對無符號數(shù)和有符號中的正數(shù),補對無符號數(shù)和有符號中的正數(shù),補0;l有符號數(shù)中的負數(shù),補有符號數(shù)中的負數(shù),補1。 10.3 程序舉例程序舉例 l【例【例10-1】取一個整數(shù)】取一個整數(shù)a從右端開始的從右端開始的47位。位。 #include void main()unsigned a,b,c,d; scanf(%o,&a); b=a4;c=(04); d=b&c; printf(%o,%dn%o, %dn,
14、a,a,d,d);【例【例10-2】從鍵盤上輸入一個正整數(shù)】從鍵盤上輸入一個正整數(shù)給給int變量變量num,按二進制位輸出該數(shù)。,按二進制位輸出該數(shù)。 #include “stdio.h“void main() int num, mask, i; printf(”Input a integer number:”); scanf(“%d”,&num); mask = 115; printf(“%d=” , num); for(i=1; i=16; i+) putchar(num&mask ? 1: 0); num = 1; if( i%4=0 ) putchar(,); printf(bBn);
15、l本章介紹的位運算在系統(tǒng)軟件開發(fā)與計算機用于檢測本章介紹的位運算在系統(tǒng)軟件開發(fā)與計算機用于檢測和控制領域中有重要應用,也是和控制領域中有重要應用,也是C語言的特色之一。語言的特色之一。重點要求讀者掌握位運算符及其應用。重點要求讀者掌握位運算符及其應用。l學好本章必須了解計算機內數(shù)據(jù)的組織與存儲形式,學好本章必須了解計算機內數(shù)據(jù)的組織與存儲形式,二進制的原理是關鍵。二進制的原理是關鍵。l本章介紹的位運算包括按位與(本章介紹的位運算包括按位與(&)、按位或()、按位或(|)、)、按位異或(按位異或()、按位取反()、按位取反()、左移()、左移(),實質上都是),實質上都是1和和0的變換或者移動,學好的變換或者移動,學好本章對今后計算機系統(tǒng)的編程很有好處。本章對今后計算機系統(tǒng)的編程很有好處。 l編寫一個函數(shù)編寫一個函數(shù)getbits,從一個,從一個16位的單元中取出某位的單元中取出某幾位即該幾位保留原值,其余位為幾位即該幾位保留原值,其余位為0)。函數(shù)調用)。函數(shù)調用形
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度城市托管班品牌授權與加盟合同
- 文化產(chǎn)品創(chuàng)意開發(fā)合同
- 工業(yè)管道清洗與維護預案
- 法律咨詢行業(yè)法律服務結果保證書
- 三農行業(yè)三農戶教育培訓計劃
- 農業(yè)種植養(yǎng)殖合同
- 智能圖書館管理系統(tǒng)供應合同
- 大學語文辯論賽故事征文
- 高考語文復習-文言文專題訓練《史記晉世家》
- 會議紀要與重要決策執(zhí)行情況跟蹤表
- 四川省建筑行業(yè)調研報告
- 北京市豐臺區(qū)2024-2025學年高三上學期期末英語試題
- 2025上海市嘉定工業(yè)區(qū)農村青年干部招聘22人歷年高頻重點提升(共500題)附帶答案詳解
- 2025采購部年度工作計劃
- 2024年度個人珠寶首飾分期購買合同范本3篇
- 食為天:2024中國食品飲料行業(yè)白皮書
- 醫(yī)學倫理與醫(yī)患溝通技巧
- 2025年牛津譯林版英語七年級下冊全冊單元重點知識點與語法匯編
- 痔瘡中醫(yī)治療課件
- 污水處理設備的故障處理指南考核試卷
- 華東師范大學《社會研究方法》2023-2024學年第一學期期末試卷
評論
0/150
提交評論