共用体、大小端cpu

来源:互联网 发布:VB中input函数怎么用 编辑:程序博客网 时间:2024/06/10 01:44

共用体(union)

 

共用体的特点:所有变量共用一份空间,空间大小由最大部分所占大小决定。同样遵循字对齐,半字对齐。


注意在向共用体中变量赋值时变量间会产生覆盖,如下面的例子


#include<stdio.h>


union node

{

    int num;

    char ch[2];

}; 


int main()

{

    node.num = 0;

    node.ch[0] = 0;

    node.ch[1] = 1;

    printf("%d",num);

    return 0;

}


输出结果:256


当为num赋值时,系统分配四个字节空间来保存0这个值,此时这四个字节空间中分布如下,原本每个空间应该是二进制下八个零,为了方便显示,现在用8421码转换为十六进制表示。



为num赋值完后,为ch[0] 赋值,保存在0x1000中,然后为ch[1] = 1赋值,保存在0x1001中,把原来的00覆盖为了01,最后从高地址向低地址输出num为00 00 01 00

十六进制下此值为256.  






小端cpu与大端cpu


int num = 0x12345678;

其中12是高字节,78是低字节,内存空间中0x1000是低地址,0x1003是高地址,

如果低字节存放在低地址那就是小端cpu,如果高字节存放在低地址那就是大端cpu。


下面是一个可以判断cpu是大端还是小端cpu


#include <stdio.h>


union node
{
    int a;
    char ch;


};
int main()
{
    union node p;


    p.a = 0x12345678;


    if(p.ch == 0x78)
    {
        printf("small!\n");
    }
    else
    {
        printf("big!\n");
    }
    return 0;
}


0 0
原创粉丝点击