C語言的移位運算符


C的移位位運算符。移位運算符向左或向右移動位。

1.左移:<<

左移運算符(<<)將其左側運算對象每一位的值向左移動其右側運算對象指定的位數。

左側運算對象移出左末端位的值丟失,用0填充空出的位置.

下面例子中,每一位都向左移動兩個位置:
    (10001010)  << 2  //表達式

    (00101000)  << 2  //結果值

該操作產生了一個新的位值,但是不改變其運算對象。例如,假設stonk為1,那么stonk << 2為4,但是stonk本身不變,仍為1。

可以使用左移賦值運算符(<<=)來更改變量的值。

該運算符將變量中的位向左移動其右側運算對象給定值的位數,如下例:

int stonk = 1; int onkoo; onkoo = stonk << 2;  /* 把4賦值給onkoo */ stonk <<= 2;  /* 把stonk的值改為4 */

2.右移:>>

 右移運算符,將其左側運算對象每一位的值向右移動其右側運算對象指定的位數。

左側運算對象移出右末端位的值丟失。

對於無符號類型,用零填充空出的位置;對於有符號類型,其結果取決於機器。

空出的位置可用0填充,或者用符號位(即最左端的位)的副本填充:

(10001010)>> 2    //表達式,有符號值

(00100010)           //在某些系統中的結果值

(10001010)>> 2    //表達式,有符號值

(11100010)           //在另一些系統上的結果值

下面是無符號值的例子:

(10001010)>> 2    //表達式,無符號值

(00100010)           //所有系統都得到該結果值

每個位向右移動兩個位置,空出的位用0填充。

右移賦值運算符(>>=)其左側的變量向右移動指定數量的位數,如下所示:

int sweet = 16;       //二進制值為:0001 0000 
int ooosw; ooosw = sweet >> 3;   // 右移三位2進制值W為:0000 0010, 十進制ooosw = 2,sweet的值仍然為16
sweet >>=3;           //sweet的值為2 ‘>>=’是右移賦值運算符

3.用法:移位運算符

移位運算符針對2的冪提供快速有效的乘法和除法:

number << n      num乘以2的n次冪

number >> n     如果number為非負,則用number除以2的n次冪

這些移位運算符,類似於在10進制中,移動小數點來乘以10或除以10。

移位預算符還可以用於較大單元中提取一些位。例如用一個unsigned long類型的值表示顏色值,低階位字節存儲紅色的強度,下一個字節存儲綠色的強度,第3個字節存儲藍色的強度。

隨后你希望把每種顏色的強度分別存儲在3個不同的類型的變量中,那么可以使用你下面的語句:

#define BYTE_MASK 0xff unsigned long color = 0x002a162f; unsigned char blue, green, red; red = color & BYTE_MASK; green = (color >> 8) & BYTE_MASK; blue = (color >> 16) & BYTE_MASK;

以上代碼中使用右移運算符,將8位顏色值移動至低階字節,然后使用掩碼技術把低階字節賦值給指定的變量。


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM