在C/C++中,char型別和int型別是等效的,只是char型別固定8bit,而int則根據機器位數不同分為16bit和32bit。
先討論比較簡單的char型別,
unsigned char,無符號字元型,也就是說八位全部用來表示數值
所以其取值範圍為00000000-11111111也就是0-2^8-1 0-255
char ,一般預設是signed char,但不同的編譯器可能處理的不一樣,這裡我們預設是按signed char來討論,也就是最高位為符號位
所以真正有效的數值位衹有7位
1 1111111-0 1111111
把紅色部分的符號位轉化為+ -後就很好理解了
- 2^7-1 ~ +2^7-1 ----> -128~127
對於int 和long 的討論過程完全一樣,
int 32位的情況
unsigned int 0 ~ 2^32-1
signed int -2^31-1 ~ +2^31-1
就不再贅述了,之所以寫這篇,因為筆者再面試的時候被問到了,雖然是個小問題,如果不理解原理,關鍵時候是會犯糊塗的。