鍍金池/ 教程/ C/ 一起talk C栗子吧(第十九回:C語(yǔ)言實(shí)例--位操作)
一起talk C栗子吧(第八回:C語(yǔ)言實(shí)例--素?cái)?shù))
一起talk C栗子吧(第十八回:C語(yǔ)言實(shí)例--輸出十六進(jìn)制)
一起talk C栗子吧(第十七回:C語(yǔ)言實(shí)例--棧二)
一起talk C栗子吧(第十九回:C語(yǔ)言實(shí)例--位操作)
一起talk C栗子吧(第十六回:C語(yǔ)言實(shí)例--棧一)
一起talk C栗子吧(第五回:C語(yǔ)言實(shí)例--數(shù)組巧妙賦值)
一起talk C栗子吧(第十二回:C語(yǔ)言實(shí)例--單鏈表一)
一起talk C栗子吧(第九回:C語(yǔ)言實(shí)例--最大公約數(shù))
一起talk C栗子吧(第二回:C語(yǔ)言實(shí)例--判斷閏年)
一起talk C栗子吧(第六回:C語(yǔ)言實(shí)例--生成隨機(jī)數(shù))
一起talk C栗子吧(第四回:C語(yǔ)言實(shí)例--斐波那契數(shù)列)
一起talk C栗子吧(第十四回:C語(yǔ)言實(shí)例--循環(huán)鏈表)
一起talk C栗子吧(第十五回:C語(yǔ)言實(shí)例--雙向鏈表)
一起talk C栗子吧(第二十一回:C語(yǔ)言實(shí)例--表達(dá)式求值)
一起talk C栗子吧(第三回:C語(yǔ)言實(shí)例--求階乘)
一起talk C栗子吧(第七回:C語(yǔ)言實(shí)例--進(jìn)制轉(zhuǎn)換)
一起talk C栗子吧(第二十回:C語(yǔ)言實(shí)例--括號(hào)匹配)
一起talk C栗子吧(第一回:C語(yǔ)言實(shí)例概述)
一起talk C栗子吧(第十回:C語(yǔ)言實(shí)例--最小公倍數(shù))
一起talk C栗子吧(第十一回:C語(yǔ)言實(shí)例--文件組織結(jié)構(gòu))
一起talk C栗子吧(第十三回:C語(yǔ)言實(shí)例--單鏈表二)

一起talk C栗子吧(第十九回:C語(yǔ)言實(shí)例--位操作)

各位看官們,大家好,上一回中咱們說(shuō)的是輸出十六進(jìn)制的例子,這一回咱們說(shuō)的例子是:位操作。閑話休提,言歸正轉(zhuǎn)。讓我們一起talk C栗子吧!

看官們,位操作有五種:與、或、非、異或、移位。接下來(lái)咱們分別介紹這些操作。為了方便說(shuō)明,我們先統(tǒng)一做一下說(shuō)明,位操作的對(duì)象是比特位。假如有三個(gè)比特位:A、B和C,大家都知道比特位的值只有0 或者1兩種,所以A、B和C的值是0或者1.我們把A和B當(dāng)作位操作的對(duì)象,C當(dāng)作A和B操作的結(jié)果。

  • 與操作:操作符為&。例子:C=A & B.只有A和B的值都為1時(shí),C的值才為1.其它情況時(shí),C的值為0。
  • 或操作:操作符為|。例子:C=A | B.只要A和B中有一個(gè)值為1時(shí),C的值就為1.其它情況時(shí),C的值為0。
  • 非操作:操作符為~。例子:C=~A.如果A的值為1時(shí),C的值才為0.反之,C的值為1。
  • 異或操作:操作符為^。例子:C=A ^ B.只有A和B的值不相同時(shí),C的值才為1.其它情況時(shí),C的值為0。
  • 移位操作:分為右移位和左移位兩種。操作符為>>和<<。向左移位的話,右邊空缺出來(lái)的位會(huì)補(bǔ)為0.向右

移位時(shí)有兩種不同情況:算術(shù)移位和邏輯移位。使用算術(shù)移位時(shí)左邊空缺出來(lái)的位會(huì)除去最高位操持不變外,其它空缺位補(bǔ)為0.使用邏輯移位時(shí),左邊空缺出來(lái)的位被補(bǔ)為0.一般情況下,編譯器都是使用算術(shù)移位, 其實(shí)對(duì)于無(wú)符號(hào)數(shù)來(lái)說(shuō),不論是算術(shù)移位還是邏輯移位,他們的操作結(jié)果都一樣。對(duì)于有符號(hào)數(shù)來(lái)說(shuō),要不一樣了,因?yàn)橛蟹?hào)的數(shù)的最高位是用來(lái)表示符號(hào)的,特別是有符號(hào)數(shù)中的負(fù)數(shù),它們的最高位是1.因 此使用右移位操作時(shí)要注意一下移位對(duì)象。另外,左稱位操作相當(dāng)于乘以2,右移位操作相當(dāng)于除以2.當(dāng)然移動(dòng)的位數(shù)不能超過(guò)變量擁有的最大的位數(shù)。因?yàn)橐莆徊僮鞯男矢撸运梢匀〈顺ā?/p>

看官們,我們說(shuō)了這么多位操作,到底有什么用途?看官莫急,通過(guò)位操作,可以取出某個(gè)位串中的一部分位,也可以對(duì)位串的某些位置置0和1.常見(jiàn)的做法是,首先定義一個(gè)掩碼,通過(guò)掩碼來(lái)對(duì)原來(lái)的位串進(jìn)行 操作,比如取出A中的4和5位的值,C=(A&00011000)>>3。

看官們,位操作中的與或操作容易與邏輯運(yùn)算中的與或運(yùn)算混淆。我在這里給大家作一下說(shuō)明:從“外表”上來(lái)看,它們是不同的:與操作使用&而與運(yùn)算使用&&?;虿僮魇褂脇而與運(yùn)算使用||,與或操作的運(yùn)算符 和與或運(yùn)算的操作符明顯不一樣。從“內(nèi)心”上來(lái)看,它們也是不同的:與或操作是對(duì)變量存儲(chǔ)單元中的位進(jìn)行操作,操作的結(jié)果就是新的變量。與或運(yùn)算是對(duì)變量或表達(dá)式的進(jìn)行真假判斷,它的結(jié)果要么是真,要 么是假。大家可以是“外表”和“內(nèi)心”來(lái)區(qū)分與或操作和與或運(yùn)算。

各位看官,關(guān)于位操作例子咱們就說(shuō)到這里。欲知后面還有什么例子,且聽(tīng)下回分解。