• X86架构下基本类型的内存存储,字节序


    此随笔测试x86下如何存储int型数据:高地址位存储int的高位,低地址位存储int的低位。这种存储方式叫做小端格式

    另外还有“大端格式”。

     

    看一个程序:

    代码
    #include "stdio.h"
    void main()
    {
        int ival = 65536;
        
    char *= &ival;
        printf(
    "*p: %d\n"*p);
        printf(
    "*p+1: %d\n"*(p+1));
        printf(
    "*p+2: %d\n"*(p+2));
        printf(
    "*p+3: %d\n"*(p+3));
        printf(
    "*p+4: %d\n"*(p+4));
                                            
    //打印指针地址
        printf("p: %p\n", p);
        printf(
    "p+1: %p\n", p+1);
        printf(
    "p+2: %p\n", p+2);
        printf(
    "p+3: %p\n", p+3);
        printf(
    "p+4: %p\n", p+4);
    }

    输出结果:

     *p: 0
    *p+1: 0
    *p+2: 1
    *p+3: 0
    *p+4: -52
    p: 0012FF70
    p+1: 0012FF71
    p+2: 0012FF72
    p+3: 0012FF73
    p+4: 0012FF74

    看一个练习题:

    练习
     1 #include "stdio.h"
     2 void main()
     3 {
     4     union { char a[10];
     5             int i;
     6     } u;
     7 
     8     int *= (int *)&(u.a[1]);            //注意是a[1],不是a[0]
     9     *= 65536;
    10     printf("u.i = %d\n", u.i);
    11     printf("u.a[0] = %d\n", u.a[0]);
    12     printf("u.a[1] = %d\n", u.a[1]);
    13     printf("u.a[2] = %d\n", u.a[2]);
    14     printf("u.a[3] = %d\n", u.a[3]);
    15     printf("u.a[4] = %d\n", u.a[4]);
    16 }

    输出结果:

    u.i = 16777420
    u.a[0] = -52
    u.a[1] = 0
    u.a[2] = 0
    u.a[3] = 1
    u.a[4] = 0

    关于字节序的参考:http://hi.baidu.com/santy/blog/item/0cb6024fd0634730aec3ab09.html

  • 相关阅读:
    树的定义与存储
    软件测试概论二
    软件测试概论
    抽象数据类型
    java编程总结01---20190214
    java 按行读取本文文件并存放到mongodb中
    刷题感悟
    刷题感悟- Binary Tree Path Sum
    java io与nio
    java IO 学习笔记
  • 原文地址:https://www.cnblogs.com/younes/p/1650032.html
Copyright © 2020-2023  润新知