首先需要明確一點,計算機中的二進位制數都是用其補碼表示的,所有的移位運算都是在補碼的表示形式上進行操作的,無符號數的補碼是其本身,有符號數的補碼是符號位不變,其他位求反加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...