Skip to content

【勘误&请教】C++基础语法38 #174

@YukiLauuu

Description

@YukiLauuu
include <iostream>
using namespace std;
//union联合体的重叠式存储,endian联合体占用内存的空间为每个成员字节长度的最大值
union endian
{
    int a;
    char ch;
};
int main()
{
    endian value;
    value.a = 0x1234;
    //a和ch共用4字节的内存空间
    if (value.ch == 0x12)
        cout << "big endian"<<endl;
    else if (value.ch == 0x34)
        cout << "little endian"<<endl;
}

在示例代码中,value.a的值被设置为0x1234,该值仅占用了16bit,因此大端的内存布局是:

p[0] = 0x00
p[1] = 0x00
p[2] = 0x12
p[3] = 0x34

从而判断为大端的条件应该是value.ch==0x00。

将示例的value.a修改为0x12345678是否更为合适?修改后如下所示:

#include <iostream>
using namespace std;
//union联合体的重叠式存储,endian联合体占用内存的空间为每个成员字节长度的最大值
union endian
{
    int a;
    char ch;
};
int main()
{
    endian value;
    value.a = 0x12345678;
    //a和ch共用4字节的内存空间
    if (value.ch == 0x12)
        cout << "big endian"<<endl;
    else if (value.ch == 0x78)
        cout << "little endian"<<endl;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions