返回主頁
回到頂端
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 0xffunsignedlong 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所示。移位時,移出的位數全部丟棄,移出的空位補入的數與左移還是...