位元組左移跟右移

2022-05-07 10:33:10 字數 559 閱讀 1720

首先看**:

#include#include

int main(void

)

對數值a進行左移32位,會得到什麼結果呢?

左移跟右移不同,不用考慮填充0或者1,當將數值左移32位,填充0,按道理得到的數值應該是0對不對?

下面是執行結果:

得到的值為5,也就是a的值,這是為什麼呢,將數值左移32位結果還是該數值。這是因為位移量要小於被位移數的位數,本例中被位移數為int型別,4個位元組也就是32位,也就是最多能移動31位,如果超過31位就會對移動位數進行取餘操作,因為32%32=0;所以得到的數值為原來數值。

但從運算子無法判斷是邏輯移位還是算術移位,可以從被移位數的型別來判斷;若x為無符號型,則為邏輯左(右)移。高(低)位移出低(高)位補零。

若x為帶符號整數:算術左移、算術右移。 左移:高位移出,低位補0。可能溢位! 溢位判斷:若移出的位不等於新的符號位,則溢位。 右移:低位移出,高位補符,可能發生有效資料丟失。

左移與右移

1 include 2 include 3 include 4 using namespace std 5 typedef unsigned char byte 6 intmain 以上的實驗說明計算機中負數是以補碼的形式存在的。而且無論是負數還是整數左移就相當於乘以2,右移就相當於除以2。左移時,...

02 算術左移邏輯左移,算術右移邏輯右移

算 術左移和邏輯左移一樣都是右邊補0 比如 00101011 算術左移一位 01010110 邏輯左移一位 01010110 對於二進位制的數值來說左移n位等於原來的數值乘以2的n次方 比如00011010十進位制是26,左移兩位後是011010 00轉成十進位制是104恰好是26的4倍。ps 這種...

C語言 左移 右移 邏輯右移 算數右移

左移 丟棄最高位,往左移位,右邊空出來的位置補0 右移 右移有邏輯右移和算數右移 邏輯右移 丟棄最低位,向右移位,左邊空出來的位置補0 算數右移 丟棄最低位,向右移位,左邊空出來的位置補原來的符號位 即補最高位 int a 1 unsigned int b a 31 31 整型a 0000 0000...