1. 程式人生 > >深入理解計算機系統 練習題2.5 答案與分析

深入理解計算機系統 練習題2.5 答案與分析

測試程式碼

#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