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位元。執行上方程式碼時的輸出,下列何者正確?

  1. A44 44
  2. B300 44
  3. 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。
練習這個領域 前往領域頁面

C語言基礎的其他題目

  1. uint8_t 是8位元的無號整數型別,int 為32位元。執行上方程式碼時的結果,下列何者正確?
  2. int 與 unsigned int 為32位元。執行上方程式碼時的結果,下列何者正確?
  3. unsigned int 為32位元。執行上方程式碼時的動作,下列何者正確?
  4. 設定「char c = 200;」並以 printf 的 %d 顯示 c 的程式,以 x86-64 Linux 用的 gcc 編譯執行時顯示 −56,以 Arm Linux 用的 gcc 則顯示200。產生差異的理由為下列何者?
  5. 執行上方在 && 與 || 的右邊寫了 b++ 的程式碼時的輸出,下列何者正確?