CSAPP:第二章学习笔记:斗之气2段

一、字长:虚拟地址通过一个字来编码,字长为32位,则可以标识2^32个地址空间,每个空间为一个字节,故为4G

二、字节序:当解释多个字节类型时,存在大小端字节序问题

  0x1234567,在大小端表示法下的内存模型

  

三、整数表示

  1.无符号数编码

  

  2.负数编码

  

三、测试大小端字节序及补码

  1.字节序:12345在ubuntu上按内存地址从小到大表示为39300000,0x3039对应12345,所以是小端表示法(低地址存放低位字节)

  2.int与float:强转后,float中部分bit位和int表示中会有对齐

  3.负数使用补码表示:

  输出结果:

  

#include <stdio.h>

typedef unsigned char *byte_pointer;

void show_bytes(byte_pointer start, int len) {
        int 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(float x) {
        show_bytes((byte_pointer) &x, sizeof(float));
}

void show_pointer(void *x) {
        show_bytes((byte_pointer) &x, sizeof(void *));
}

void test_show_bytes(int val) {
        int ival = val;
        float fval = (float) ival;
        int *pval = &ival;
        show_int(ival);
        show_float(fval);
        show_pointer(pval);
}

int main() {
    int val = 12345;
    test_show_bytes(val);
    test_show_bytes(-val);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/forTheDream1991/p/10566363.html