C語言基礎

union { uint32_t w; uint8_t b[4]; } u;
u.w = 0x12345678;
printf("%02X %02X\n", u.b[0], u.b[1]);

uint32_t 與 uint8_t 分別是32位元與8位元的無號整數型別,且為小端序環境。執行上方程式碼時的輸出,下列何者正確?

  1. A12 34
  2. B78 56
  3. C87 65
查看答案與解析

正確答案:B. 78 56

聯合(union)的成員從同一位址開始重疊放置,因此 u.b[0]~u.b[3] 分別表示 u.w 的4個位元組。小端序把最低位的位元組放在最小的位址,因此 0x12345678 從小的位址開始依 78、56、34、12 的順序排列。所以 u.b[0] 為 0x78,u.b[1] 為 0x56。以不同於寫入時的成員讀取,可以像這樣用來調查位元組的順序,但結果會因端序而異。

  • A. 這是大端序環境中的輸出。
  • B. 正確。最低位的位元組 0x78 放在開頭的位址。
  • C. 位元組的順序會相反,但1個位元組內的高4位元與低4位元不會互換。
練習這個領域 前往領域頁面

C語言基礎的其他題目

  1. 執行上方把9放入3位元位元欄位的程式碼時的輸出,下列何者正確?
  2. 執行上方使用以 #define 定義之巨集 SQUARE 的程式碼時的輸出,下列何者正確?
  3. 標頭檔 sensor.h 寫成上方的樣子。#ifndef、#define、#endif 這3行的目的,下列何者正確?
  4. 把上方程式碼寫在 main 函式中執行時的輸出,下列何者正確?
  5. 微控制器的輸出暫存器以上方的方式宣告並使用。關於這個宣告的說明,下列何者正確?