35. 有一個變數dataX,其在C語言中的資料型態是short。若以little endian的方式儲存dataX在記憶體中,且dataX在記憶體的起始位址是1002。令記憶體位址1000到1007的八個位元組的記憶體內容依序如下(位址1000的記憶體內容是00000001,位址1001的記憶體內容是00000010,
以此類推):
00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000
請問dataX的值為何?
(A) 516
(B) 1032
(C) 2052
(D) 4128
答案:登入後查看
統計: A(13), B(38), C(32), D(5), E(0) #3131052
統計: A(13), B(38), C(32), D(5), E(0) #3131052
詳解 (共 2 筆)
#6423776
此問題要求根據記憶體內容和位元組順序(endianness)來判斷一個 short 型別變數的值。
-
確定變數大小和記憶體位置:
- short 型別在 C 語言中通常佔用 2 個位元組(16 位元)。
- dataX 的起始位址是 1002。
- 因此,dataX 的資料將佔用記憶體位址 1002 和 1003。
-
取得相關記憶體位址的內容:
- 位址 1002 的記憶體內容是 00000100 (二進位)
- 位址 1003 的記憶體內容是 00001000 (二進位)
-
應用 Little-Endian 規則:
- Little-Endian 儲存方式的規則是:最低有效位元組 (LSB) 儲存在較低的記憶體位址,最高有效位元組 (MSB) 儲存在較高的記憶體位址。
- 因此,位址 1002 上的 00000100 是 dataX 的 LSB。
- 位址 1003 上的 00001000 是 dataX 的 MSB。
-
組合位元組並轉換為十進制:
-
將 MSB 放在左側,LSB 放在右側,形成 16 位元的二進位數: MSB LSB = 00001000 00000100 (二進位)
-
現在將這個 16 位元的二進位數轉換為十進制: 從右到左,位元權重為 20,21,22,…,215 0 * 2^0 + 0 * 2^1 + 1 * 2^2 + 0 * 2^3 + \ldots (來自 LSB) \ldots + 0 * 2^8 + 0 * 2^9 + 1 * 2^{10} + 0 * 2^{11} + \ldots (來自 MSB)
具體計算: 0 * 2^15 + 0 * 2^14 + 0 * 2^13 + 0 * 2^12 + 1 * 2^11 + 0 * 2^10 + 0 * 2^9 + 0 * 2^8 + 0 * 2^7 + 0 * 2^6 + 0 * 2^5 + 0 * 2^4 + 0 * 2^3 + 1 * 2^2 + 0 * 2^1 + 0 * 2^0 =0+0+0+0+2048+0+0+0+0+0+0+0+0+4+0+0 =2048+4=2052
-
因此,dataX 的值是 2052。
The final answer is C
0
0