今天看到個別人提的問題,不懂便查了點資料解決了(可能很簡單,但之前確實不清楚)。問題如下:
執行結果是什麼?
結果為: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...