c 中的移位操作 填坑系列

2021-10-03 20:31:23 字數 854 閱讀 9962

首先需要明確一點,計算機中的二進位制數都是用其補碼表示的,所有的移位運算都是在補碼的表示形式上進行操作的,無符號數的補碼是其本身,有符號數的補碼是符號位不變,其他位求反加1。這裡說的很清楚。

左移:高位移出,低空位補0。相當於乘以2的n次方

當左移一定位數時,最高位變為1,這時計算機會認為這是乙個負數的補碼,這時你輸出一下計算機就會顯示乙個負數。如果左移位數超過int型別數值的位數,則會顯示為0,因為低空位是用0填補的.比如

int b  = (9<<28); 

cout<右移:低位移出,高空位補0。相當於除以2的n次方

當右移位數超過二進位制數字的表示位數時,結果就會變成0,再怎麼右移也不會再變,因為會變成0x00000000,也就是0的補碼。比如

int b_ = (9>>5);

cout<左移:高位移出,低空位補0。

同樣的道理,當左移一定位數時,最高位變為0,這時計算機會認為這是乙個正數的補碼,這時你輸出一下計算機就會顯示乙個正數。如果左移位數超過int型別數值的位數,則會顯示為0,因為低空位是用0填補的.比如

int b = (-9<<23);

cout<右移:低位移出,高空位補1。

當右移位數超過二進位制數字的表示位數時,結果就會變成-1,再怎麼右移也不會再變,因為最後會變成這個數0xffffffff,這就是-1的補碼,所以不會再變。比如

int b = (-9>>1);

int b_ = (-9>>5);

cout

c中的移位操作

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

C C 中的移位操作

1 什麼樣的資料型別可以直接移位 char short int long unsigned char unsigned short unsigned int unsigned long都可以進行移位操作,而double float bool long double則不可以進行移位操作。2 有符號資料...

c語言的移位操作

左移時總是移位和補零。右移時無符號數是移位和補零,此時稱為邏輯右移 而有符號數大多數情況下是移位和補最左邊的位 也就是補最高有效位 移幾位就補幾位,此時稱為算術右移。include using namespace std void main buf 1 temp 0x00ff temp temp 8...