char溢位計算

2021-07-24 22:41:49 字數 711 閱讀 2189

無符號char 型別能標示的數是:0-255

有符號char型別能標示的數是:-128-127

char c = 128;

printf("c = %x \n", c);

得到結果是:

c = ffffff80

這個如何理解 char是乙個位元組的,怎麼變成四位元組了???

128的十六進製制是0x80, 也就是2^7, 二進位制看起來像這樣:1000 0000 ,賦值給有符號數char c,其二進位制不變。

但是小於sizeof(int)的整數在使用時其實都是擴充套件到sizeof(int)再計算的,對於有符號數擴寬填充符號位,這裡char ch=128的符號位是1,所以就是擴充了1111 1111 1111 1111 1111 1111 1000 0000,這樣,列印%x時候,就是你看到的結果了。

這個擴寬是很正常的,並不會影響乙個數值本身, 只是儲存的位元組變寬了而已。 

比如char ch =1; 那麼擴寬後是0x00 00 00 01,還是1.

比如short st = -1, 其十六進製制原來是:0xff ff, 擴寬為int後是0xff ff ff ff,因為int是有符號數,所以實際的值是取反+1,就是- (0x00 00 00 00 + 1) = -(0x00 00 00 01), 還是-1。重新截斷回short,也就是從0xff ff ff ff變為0xff ff,因為short是有符號數, 取反+1後還是-1, 始終是一致的。

關於char的溢位問題

現在看下面的問題 int main 結果為什麼是 127?int main 結果為什麼是127?解析 首先要知道三點 第一點 大家知道char型別的取值範圍是 128到127,這是char型別的儲存空間限制的。char型別的變數佔1個位元組,最高位為符號位,0代表正數,1代表負數。這樣char型別最...

資料溢位相關計算

整數反轉 例 142 241 14 2 1 24 0 241 存在問題 反轉後資料溢位 int型的數值範圍是 2147483648 2147483647 param x return public intreverse int x res res 10 x 10 x x 10 return res ...

筆記 整數計算溢位

讀 深入理解計算機系統 第二章 資訊的表示與處理 1 bool checkuaddoverflow unsigned int x,unsigned inty 2 1 bool checkaddoverflow int x,inty 2 910bool checkaddoverflow2 int x,...