深入理解計算機系統 練習題2.5 答案與分析
阿新 • • 發佈:2019-02-16
測試程式碼
#include <stdio.h>
#include "stdafx.h"
#include <iostream>
typedef unsigned char *byte_pointer;
void show_bytes(byte_pointer start, size_t len) {
size_t i;
for (i = 0; i < len;i++) {
printf(" %.2x", start[i]);
}
printf("\n");
}
void show_int(int x) {
show_bytes((byte_pointer)&x, sizeof (int));
}
void show_float(int x) {
show_bytes((byte_pointer)&x, sizeof(float));
}
void show_pointer(int *x) {
show_bytes((byte_pointer)&x, sizeof(void *));
}
int main() {
int val = 0x87654321;
byte_pointer valp = (byte_pointer) &val;
show_bytes(valp, 1);
show_bytes(valp, 2 );
show_bytes(valp, 3);
system("pause");
}
執行結果
我是在WIN10下跑的程式,由此可見WINDOW是小端法,先明確此點。
根據0x87654321這個數值,因為是16進位制,所以需要4個字表示一個數字,一個位元組儲存2個數字,在小端法中21為陣列下標0,43為陣列下標1,65為陣列下標2,87為陣列下標3,正好是32位int型別。根據程式碼所以結果為
列名 | 小端法 | 大端法 |
---|---|---|
show_bytes(valp, 1); | 21 | 87 |
show_bytes(valp, 2); | 21 43 | 87 65 |
show_bytes(valp, 3); | 21 43 56 | 87 65 43 |