C語言的移位運算子

2022-03-30 12:04:19 字數 1879 閱讀 7570

返回主頁

回到頂端

c的移位位運算子。移位運算子向左或向右移動位。

左移運算子(<<)將其左側運算物件每一位的值向左移動其右側運算物件指定的位數。

左側運算物件移出左末端位的值丟失,用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

*/

右移運算子,將其左側運算物件每一位的值向右移動其右側運算物件指定的位數。

左側運算物件移出右末端位的值丟失。

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

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

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

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

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

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

下面是無符號值的例子:

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

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

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

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

int sweet = 16;       //

二進位制值為:0001 0000

intooosw;

ooosw = sweet >> 3; //

右移三位2進製值w為:0000 0010, 十進位制ooosw = 2,sweet的值仍然為16

sweet >>=3; //

sweet的值為2 『>>=』是右移賦值運算子

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

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

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

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

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

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

#define byte_mask 0xffunsigned 

long color = 0x002a162f

;unsigned

char

blue, green, red;

red = color &byte_mask;

green = (color >> 8) &byte_mask;

blue = (color >> 16) & byte_mask;

以上**中使用右移運算子,將8位顏色值移動至低階位元組,然後使用掩碼技術把低階位元組賦值給指定的變數。

C語言移位運算子

位移位運算子是將資料看成二進位制數,對其進行向左或向右移動若干位的運算。位移位運算子分為左移和右移兩種,均為雙目運算子。第一運算物件是移位物件,第二個運算物件是所移的二進位制位數。位移位運算子的運算物件 運算規則與結果 結合性如表2 16所示。移位時,移出的位數全部丟棄,移出的空位補入的數與左移還是...

C 移位運算子

int result1 66 1 正數的左移位運算規則,左移一位乘以2,右移移位除以2 左移兩位乘以4,三位乘以8,4位乘以16,右移則相反 int result2 66 1 負數的移位運算在最高位補1 運算規則和正數一樣 console.writeline 正數移位 result1 負數移位 re...

C語言中位移位運算子

位移位運算子是將資料看成二進位制數,對其進行向左或向右移動若干位的運算。位移位運算子分為左移和右移兩種,均為雙目運算子。第一運算物件是移位物件,第二個運算物件是所移的二進位制位數。位移位運算子的運算物件 運算規則與結果 結合性如表2 16所示。移位時,移出的位數全部丟棄,移出的空位補入的數與左移還是...