




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
掌握基本位運算的形式掌握位運算的一般性計算方法10.1幾個基本概念【問題】我們知道任何信息在計算機(jī)中都是以二進(jìn)制形式表示,而我們?nèi)粘I钪惺褂玫氖鞘M(jìn)制,由于位運算是指進(jìn)行二進(jìn)制位的運算,因此在學(xué)習(xí)位運算之前我們有必要了解與回顧一下計算機(jī)內(nèi)數(shù)據(jù)組織與存儲形式。10.1.1字節(jié)與位字節(jié)(byte)是計算機(jī)中的存儲單元。一個字節(jié)可以存放一個英文字母或符號,一個漢字通常要用兩個字節(jié)來存儲。每一個字節(jié)都有自己的編號,叫做“地址”。1個字節(jié)由8個二進(jìn)制位(位的英文是bit)構(gòu)成,每位的取值為0或1。最右端的那1位稱為“最低位”,編號為0;最左端的那1位稱為“最高位”,而且從最低位到最高位順序,依次編號。7654321010.1.1字節(jié)與位我們把若干字節(jié)組成一個單元,叫做“字”(word)。一個字可以存放一個數(shù)據(jù)或指令。至于一個字由幾個字節(jié)組成,取決于計算機(jī)的硬件系統(tǒng)。一般由1個、2個或4個字節(jié)組成,所對應(yīng)的計算機(jī)也被稱為“8位機(jī)、16位機(jī)或32位機(jī)”。目前微機(jī)以16位機(jī)或32位機(jī)為主。在本書中作為原理講述的是8位機(jī)。10.1.2原碼把最高位留做表示符號,其他7位表示二進(jìn)制數(shù),這種編碼方式叫做原碼。最高位為“0”表示正數(shù),為“1”表示負(fù)數(shù)。例如:00000011 表示 +310000011 表示 -3顯然,這樣可以表示的數(shù)值范圍在+127到-127之間。這種表示方法有一個缺陷,數(shù)值0會出現(xiàn)歧義:00000000 表示 +010000000 表示 -010.1.3反碼對于正數(shù),反碼與原碼相同。例如:00000011 表示 +3。所謂“反碼”是指與“原碼”在表示負(fù)數(shù)時相反:符號位(最高位)為“1”表示負(fù)數(shù)。但其余位的值相反。例如,11111100表示-3。顯然,這樣可以表示的數(shù)值范圍在+127到-127之間。這種表示方法仍然有一個缺陷,數(shù)值0會出現(xiàn)歧義:00000000 表示 +011111111 表示 -010.1.4補(bǔ)碼對于正數(shù),補(bǔ)碼與原碼相同。0的補(bǔ)碼為00000000。這樣,0的表示唯一。對于負(fù)數(shù),可以從原碼得到補(bǔ)碼。步驟如下:符號位不變,其余各位取反;整個數(shù)加1。已知補(bǔ)碼,求原碼:符號位不變,其余各位取反整個數(shù)加1。10.1.4補(bǔ)碼例如,已知補(bǔ)碼為11111001,求原碼。符號位為“1”,表示是一個負(fù)數(shù),所以該位不變,仍為“1”;其余7位1111001取反后為0000110;再加1,所以是10000111(-7)。計算機(jī)中的數(shù)據(jù)都采用補(bǔ)碼。原因是:使用補(bǔ)碼,可以將符號位和其它位統(tǒng)一處理;同時,減法也可按加法來處理。如-3+4可以變成-3的補(bǔ)碼與+4的補(bǔ)碼相加兩個用補(bǔ)碼表示的數(shù)相加時,如果最高位(符號位)有進(jìn)位,則進(jìn)位被舍棄。10.2位運算符和位運算位運算表10.2.1按位取反【運算符】~
【格式】~x
【功能】各位翻轉(zhuǎn),即原來為1的位變成0,原來為0的位變成1。
【主要用途】間接地構(gòu)造一個數(shù),以增強(qiáng)程序的可移植性。
【示例】如x=83,y=~x,則y=172。83(01010011)
~83(~01010011)
172(10101100)
10.2.2按位與【運算符】&【格式】x&y【功能】當(dāng)兩個操作對象二進(jìn)制數(shù)的相同位都為1時,結(jié)果數(shù)值的相應(yīng)位為1,否則為相應(yīng)位是0?!局饕猛尽咳?或保留)1個數(shù)的某(些)位,其余各位置0。【示例】如x=146,y=222,z=x&y,則z=146。10.2.3按位或【運算符】|【格式】x|y【功能】當(dāng)兩個操作對象二進(jìn)制數(shù)的相同位都為0時,結(jié)果數(shù)值的相應(yīng)位為0,否則為相應(yīng)位是1?!局饕猛尽繉?個數(shù)的某(些)位置1,其余各位不變。【示例】如x=146,y=222,z=x|y,則z=222。10.2.4按位異或【運算符】^【格式】x^y【功能】當(dāng)兩個操作對象二進(jìn)制數(shù)的相同位的值相同時,結(jié)果數(shù)值的相應(yīng)位為0,否則為相應(yīng)位是1?!局饕猛尽渴?個數(shù)的某(些)位翻轉(zhuǎn)(即原來為1的位變?yōu)?,為0的變?yōu)?),其余各位不變。【示例】如x=146,y=222,z=x^y,則z=76
10.2.5左位移【運算符】<<【格式】x<<要位移的位數(shù)【功能】把操作對象的二進(jìn)制數(shù)向左移動指定的位,并在右面補(bǔ)上相應(yīng)的0,高位溢出?!臼纠咳鐇=01010011,y=x<<2,則y=10110000。【注意】左移會引起數(shù)據(jù)的變化,具體說,左移一位相當(dāng)于對原來的數(shù)值乘以2。左移n位相當(dāng)于對原來的數(shù)值乘以2n。10.2.6右位移【運算符】>>【格式】x>>要位移的位數(shù)【功能】把操作對象的二進(jìn)制數(shù)向右移動指定的位,移出的低位舍棄;高位:(1)對無符號數(shù)和有符號中的正數(shù),補(bǔ)0;(2)有符號數(shù)中的負(fù)數(shù),取決于所使用的系統(tǒng):補(bǔ)0的稱為“邏輯右移”,補(bǔ)1的稱為“算術(shù)右移”?!臼纠咳鐇=01010011,y=x>>2,則y=00010100【注意】右移會引起數(shù)據(jù)的變化,具體說,右移一位相當(dāng)于對原來的數(shù)值除以2。右移n位相當(dāng)于對原來的數(shù)值除以2n說明x、y和“位數(shù)”等操作數(shù),都只能是整型或字符型數(shù)據(jù)。除按位取反為單目運算符外,其余均為雙目運算符。參與運算時,操作數(shù)x和y都必須首先轉(zhuǎn)換成二進(jìn)制形式,然后再執(zhí)行相應(yīng)的按位運算。例如:5<<2→20即101<<10→10100,20>>2→5即10100>>10→00101。復(fù)合賦值運算符除按位取反運算外,其余5個位運算符均可與賦值運算符一起,構(gòu)成復(fù)合賦值運算符:&=、|+、^=、<<=、>>=。例如,a&=b相當(dāng)于a=a&b。a<<=2相當(dāng)于:a=a<<2。不同長度數(shù)據(jù)間的位運算──低字節(jié)對齊,短數(shù)的高字節(jié)按最高位補(bǔ)位:對無符號數(shù)和有符號中的正數(shù),補(bǔ)0;有符號數(shù)中的負(fù)數(shù),補(bǔ)1。
10.3程序舉例【例10-1】取一個整數(shù)a從右端開始的4~7位。#include<stdio.h>void
main()
{unsigneda,b,c,d;
scanf("%o",&a);
b=a>>4; c=~(~0<<4);d=b&c;
printf("%o,%d\n%o,%d\n",a,a,d,d);
}【例10-2】從鍵盤上輸入一個正整數(shù)給int變量num,按二進(jìn)制位輸出該數(shù)。 #include“stdio.h“
voidmain()
{ intnum,mask,i;
printf(”Inputaintegernumber:”);
scanf(“%d”,&num);
mask=1<<15;
printf(“%d=”,num);
for(i=1;i<=16;i++)
{putchar(num&mask?‘1’:‘0’);
num<<=1;
if(i%4==0)putchar(‘,’);
}
printf("\bB\n");
} 本章介紹的位運算在系統(tǒng)軟件開發(fā)與計算機(jī)用于檢測和控制領(lǐng)域中有重要應(yīng)用,也是C語言的特色之一。重點要求讀者掌握位運算符及其應(yīng)用。學(xué)好本章必須了解計算機(jī)內(nèi)數(shù)據(jù)的組織與存儲形式,二進(jìn)制的原理是關(guān)鍵。本章介紹的位運算包括按位與(&)、按位或(|)、按位異或(^)、按位取反(~)、左移(<<)、右移(>>),實質(zhì)上都是1和0的變換或者移動,學(xué)好本章對今后計算機(jī)系統(tǒng)的編程很有好處。編寫一個函數(shù)getbits,從一個16位的單元中取出某幾位(即該幾位保留原值,其余位為0
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 創(chuàng)新型人才引領(lǐng)鄉(xiāng)村振興的路徑探索
- 重慶市開州區(qū)鎮(zhèn)東初級中學(xué)2025屆化學(xué)九上期末達(dá)標(biāo)檢測模擬試題含解析
- 江蘇省無錫市第一女子中學(xué)2025屆九上化學(xué)期末預(yù)測試題含解析
- 山西財經(jīng)大學(xué)華商學(xué)院《內(nèi)部控制制度》2023-2024學(xué)年第一學(xué)期期末試卷
- 商業(yè)停車場車位租賃與廣告合作合同
- 文化教育設(shè)施設(shè)計與施工方案研究
- 2025至2030中國狗肉行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025至2030中國月子中心行業(yè)產(chǎn)業(yè)運行態(tài)勢及投資規(guī)劃深度研究報告
- 石油化工行業(yè)發(fā)展現(xiàn)狀與未來趨勢分析預(yù)測報告
- 2025至2030中國自助點菜亭行業(yè)市場深度研究及發(fā)展前景投資可行性分析報告
- 2025年廣州市中考物理試題(含答案)
- 2024年漳州市常山開發(fā)區(qū)招聘筆試真題
- 2024年09月年中國農(nóng)業(yè)發(fā)展銀行江蘇省分行秋季校園招聘(86人)筆試歷年參考題庫附帶答案詳解
- 2025年江蘇省揚州市中考作文4篇范文:“尊重”“誠實”“創(chuàng)造性”“美好生活”
- 2025年輔警招聘考試試題庫含完整答案
- 2025年吉林省中考語文試卷及答案
- 2024-2025學(xué)年度天津鐵道職業(yè)技術(shù)學(xué)院單招《語文》真題附答案詳解(突破訓(xùn)練)
- 快遞行業(yè)市場發(fā)展分析及投資前景研究報告2025-2028版
- 2025年第十屆“學(xué)憲法、講憲法”網(wǎng)絡(luò)知識競賽題庫(含答案)
- 格拉辛紙項目投資價值分析報告【參考模板】
- 最新四川水利工程質(zhì)量備案表格填寫范例
評論
0/150
提交評論