int 與 unsigned int 移位運算

2021-06-28 00:45:55 字數 756 閱讀 6510

今天看到個別人提的問題,不懂便查了點資料解決了(可能很簡單,但之前確實不清楚)。問題如下:

執行結果是什麼?

結果為:fffffff4  f8

思路為:

開始想著這肯定跟型別範圍有關,int 為-2的31次方

到   

2的31次方減1,unsigned int 為0 到 2的32次方。

後來想到 int是帶符號型別,最高位為符號位,所以 a 的最高位1是表示符號位。

最後查到右移的介紹如下:

右移有兩種,算術右移(帶符號)>>和邏輯右移(不帶符號)>>>。

算術右移符號位不變,左邊補上符號位。如: 1000 1000 >> 3 為 1111 0001

邏輯右移符號位一起移動,左邊補上0。如:1000 1000 >>> 3 為 0001 0001

注意:移位的位數不能超過資料的大小,不能小於0。

所以a右移24位,全補上符號位1,即前24位均為1,後8為的16進製為f8;

b右移24位,全補0,即得000000f8。

unsigned int與int相加問題

作者 卿篤軍 一道unsigned int與int型別的相加題目。引發了我對這個問題的思考。首先要明確兩個問題 問題一 unsigned int和int究竟哪個能表達出來的數上限大呢?答 當然是unsigned int。為什麼?答 由於。int將最高位看做是符號位。0表示 正 1表示 負 也就是說,...

C語言之unsigned int和int的運算

首先先說明下 1 數值在計算機中是以補碼的形式儲存的。同時如果兩個補碼相加時,最高位也就是我們的符號位如果有進製,是需要丟棄的。正數的補碼是自己本身,負數的補碼是符號位為1,其餘位為該數絕對值的原碼按位取反,然後整個數再加1.2 如果乙個運算子兩邊的運算數型別不同,先要將其轉換為相同的型別,即較低型...

unsigned int型別分析

int main void 結果 a 1,b 128,c 127,d 1 aa 255,bb 0,cc 1 你看下unsigned char 值從0 255 char就是int char值從 127 128 在0 128 不管unsigned char 還是char的值都要一樣的 是的沒錯 char...