C語言基礎
unsigned char a = 200, b = 100;
int s = a + b;
unsigned char c = a + b;
printf("%d %d\n", s, c);unsigned char 為8位元,int 為32位元。執行上方程式碼時的輸出,下列何者正確?
- A44 44
- B300 44
- C300 300
查看答案與解析
正確答案:B. 300 44
C語言中,比 int 小的型別(char、short 等)的值,在運算前會轉換為 int(整數提升)。因此 a + b 不是以8位元,而是以 int 計算而得到300,int 的 s 直接得到300。指派給8位元的 c 時,則轉換為除以256的餘數44。即使在8位元的微控制器上,依標準,運算式中間的計算也是以 int 的寬度進行。
- A. 加法以 int 進行,因此 s 得到300。這是認為以8位元計算時的值。
- B. 正確。s 是以 int 計算的300,c 是300除以256的餘數44。
- C. unsigned char 的 c 放不進256以上的值,300會被轉換為44。