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

詳解 (共 2 筆)

#6054468
Big-Endian 與 Little-...


(共 492 字,隱藏中)
前往觀看
3
0
#6423776

此問題要求根據記憶體內容和位元組順序(endianness)來判斷一個 short 型別變數的值。

  1. 確定變數大小和記憶體位置:

    • short 型別在 C 語言中通常佔用 2 個位元組(16 位元)。
    • dataX 的起始位址是 1002。
    • 因此,dataX 的資料將佔用記憶體位址 1002 和 1003。
  2. 取得相關記憶體位址的內容:

    • 位址 1002 的記憶體內容是 00000100 (二進位)
    • 位址 1003 的記憶體內容是 00001000 (二進位)
  3. 應用 Little-Endian 規則:

    • Little-Endian 儲存方式的規則是:最低有效位元組 (LSB) 儲存在較低的記憶體位址,最高有效位元組 (MSB) 儲存在較高的記憶體位址。
    • 因此,位址 1002 上的 00000100 是 dataX 的 LSB。
    • 位址 1003 上的 00001000 是 dataX 的 MSB。
  4. 組合位元組並轉換為十進制:

    • 將 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