2017年計算機二級考點歸納:C語言位運算

字號:


    15.1 位運算的含義及應(yīng)用
    1.位的概念
    大多數(shù)計算機系統(tǒng)的內(nèi)存儲器是由眾多的存儲單元構(gòu)成的。在微機中,每個存儲單元是1個字節(jié),它由8位二進制數(shù)構(gòu)成,可以表示28=256種信息,各位的編號從0~7,最左邊的位(第7位)是位,最右邊的位(第0位)是最低位。由于二進制本身的特點,各位上的數(shù)字不是1,就是0。
    本章中的位就是指上述提到的二進制位,本章中的位運算就是指對這些二進制的位進行邏輯運算、移位運算等操作。
    2.數(shù)的編碼
    數(shù)在計算機中是以二進制表示的,但是它并不是簡單地以它本身的數(shù)值的二進制形式來直接表示,而要進行一定的編碼,以方便計算機進行處理。常用的編碼有原碼、反碼、補碼三種。
    3.真值與原碼
    我們將一個十進制數(shù)的二進制表示稱為這個十進制數(shù)的真值,它代表了這個十進制數(shù)本身的數(shù)值。下表列出了一些數(shù)的真值。
    真值舉例
    數(shù) 二進制表示 真值(16位)
    0
    1
    7 0
    1
    111 0000000000000000
    0000000000000001
    0000000000000111 
    15 
    1111 
    0000000000001111
    255
    4095
    65535 11111111
    111111111111
    1111111111111111 0000000011111111
    0000111111111111
    1111111111111111
    用真值表示的數(shù)只能是正數(shù),對于負數(shù),要用“一”號標(biāo)明,例如:
    -7的真值為-0000000000000111 -65535的真值為-1111111111111111
    這勢必造成用計算機表示數(shù)時的不便,故引入了原碼表示法。
    在原碼表示法中,位代表符號位,用“1”表示負數(shù),“0”表示正數(shù);余下的數(shù)位用來表示真值的絕對值。
    數(shù)字零存在著兩種表示方法:+0與-0。
    4.反碼
    若采用反碼表示,則對應(yīng)的原碼應(yīng)按照以下方法進行轉(zhuǎn)換:
    (1)如果真值為正,則它的反碼與原碼相同;
    (2)如果真值為負,則反碼的符號位為1,其余各位就是對原碼取反(即原碼的1變?yōu)?,原碼的0變?yōu)?)。
    5.補碼
    (1)為什么要引入補碼
    補碼具有許多獨特的優(yōu)點:首先它可以變減法運算為加法運算,使得計算時步驟統(tǒng)一,速度提高;其次,在這種系統(tǒng)下的“0”只有惟一的一種表示方法,這就是現(xiàn)代的計算機系統(tǒng)中大多采用補碼的原因。
    (2)補碼的規(guī)定
    ①正數(shù)的原碼、補碼、反碼均相同;
    ②計算負數(shù)的補碼時,先置符號位為1,再對剩余原碼的位數(shù)逐位取反,最后對整個數(shù)加1。
    在微機上以8位二進制數(shù)為一字節(jié)的存儲單元中采用補碼系統(tǒng),它可以存放的最小整數(shù)為-128,整數(shù)為+127。若采用兩個字節(jié)來表示一個整數(shù),則可表示的最小整數(shù)為-32768,整數(shù)為+32767。
    15.2 簡單的位運算
    C語言提供了位(bit)運算的功能,這使它像匯編語言一樣用來編寫系統(tǒng)程序。位運算符共有六種;
    位運算符
    位運算符 含義
    & 位與
    ︳ 位或
    ∧ 位異或
    ~ 位取反
    << 位左移
    >> 位右移
    本節(jié)介紹前四種運算,即位的邏輯運算。
    1.按位與運算
    ①概念
    “按位與”運算符“&”是雙目運算符,其功能是將參與運算兩數(shù)的各對應(yīng)二進位相與。只能對應(yīng)的兩個二進位均為1時,結(jié)果位才為1,否則為0。
    ②“按位與”與運算的特殊用途
    ⅰ.清零
    如果想將一個存儲單元清零,即使其全部二進位為0,可按這樣的方法計算:
    找一個數(shù),它的補碼形式中各位的值符合如下條件:原來的數(shù)中為1的位,新數(shù)中相應(yīng)位為0(注意,并不要求原數(shù)為0的位上,新數(shù)相應(yīng)位為1,新數(shù)相應(yīng)位可以是0或1);對二者進行&運算。
    ⅱ.取一個數(shù)中某些字節(jié)
    對于一個整數(shù)a(占2個字節(jié)),如要想得到其中的低字節(jié),只需將a與特定的一個數(shù)按位與即可。
    ③要想將一個數(shù)的某一位保留下來,可將該數(shù)與一個特定的數(shù)進行&處理。
    2.按位或運算
    “按位或”運算符“︳”是雙目運算符,其功能是將參與運算兩數(shù)的各對應(yīng)的二進位相或。只要對應(yīng)的兩個二進位有一個為1時,結(jié)果位就為1。參與運算的整數(shù)均以補碼出現(xiàn)。
    3.按位異或運算
    ①概念
    “按位異或”運算符“∧”是雙目運算符,其功能是將參與運算兩數(shù)的各對應(yīng)位相異或,當(dāng)兩對應(yīng)的二進位相異時,結(jié)果為1,否則為0。參與運算整數(shù)仍以補碼出現(xiàn)。
    ②“異或”運算的特殊應(yīng)用
    ⅰ.使特定位翻轉(zhuǎn)
    ⅱ.與0相“異或”,保留原值。
    ⅲ.交換兩個值。
    4.“取反”運算
    “~”是一個一元運算符,即它的運算量只有一個,用來對一個二進制數(shù)按位取反,即將0變1,1變0。比如說,~025就是對八進制數(shù)25(即二進制數(shù)000000000010101)按位求反。
    15.3 移位運算
    1.移位運算符
    移位運算是對操作數(shù)以二進制位為單位進行左移或右移。
    移位操作
    運算符 名 稱 例 子 運算功能
    >> 右移位 b>>3 b右移3位
    << 左移位 c<<2 c左移2位
    2.左移運算
    左移運算符“<<”是雙目運算符,其功能把“<<”左邊的運算數(shù)的各二進位全部左移若干位,由“<<”右邊的數(shù)指定移動的位數(shù),高位丟棄,低位補0。例如;
    a<<4
    就把a的各二進位向左移動4位。如a=00000011(十進制3),左移4位后為00110000(十進制48)。
    3.右移運算
    右移運算符“>>”是雙目運算符,其功能是把“>>”左邊的運算數(shù)的各二進位全部右移若干位,“>>”右邊的數(shù)指定移動的位數(shù)。例如:
    a=15,a>>2
    表示把000001111右移為00000011(十進制3)。應(yīng)該說明的是,對于有符號數(shù),在右移時,符號位將隨同移動。當(dāng)為正數(shù)時,位補0;而為負數(shù)時,符號位為1,位是補0或1取決于編譯系統(tǒng)的規(guī)定。Turbo C 規(guī)定補1。
    右移運算相當(dāng)于將運算對象除2.
    15.4 位賦值運算
    位賦值運算符。
    位賦值運算符
    運算符 名 稱 例 子 等價于
    &= 位與賦值 a&=b a=2&b
    ︳= 位或賦值 a|=b a=a|b
    ∧= 位異或賦值 a∧=b a=a∧b
    >>= 右移賦值 a>>b a=a>>b
    <<= 左移賦值 a<<=b a=a<
    位賦值運算的過程為:
    (1)先對兩個操作數(shù)進行位操作;
    (2)然后把結(jié)果賦予第一個操作數(shù),因此第一個操作數(shù)必須是變量。
    位賦值運算與算術(shù)賦值運算相似,它們都統(tǒng)稱復(fù)合賦值運算。