C语言共用体覆盖问题

2025-04-02 09:24:55
推荐回答(2个)
回答1:

你那书是专门这么印的,不然怎么表现出两个元素的二进制。

真实的排布应该是011110100110000101000001(右为低位)='A' 'a' 'z'

这个代码展现了真实的电平排布

#include 
#include 
#include
using namespace std;

union d
{
    short i;
    char ii[3];
};
int main()
{
    d a;
    a.ii[0]='x';
    bitset<8> a1(a.ii[0]);
    cout<    a.ii[1]='y';
    bitset<8> a2(a.ii[1]);
    cout<    a.ii[2]='z';
    bitset<8> a3(a.ii[2]);
    cout<    a.i=24897;
    bitset<16> a4(a.i);
    cout<    bitset<8> a5('A');
    cout<    bitset<8> a6('a');
    cout<    int i=0;
    memcpy(&i,&a,4*8);
    bitset<32> bb(i);
    cout<    return 0;
}

回答2:

内存是倒着存的,,你是不是没把short的倒回来啊
所以A跟Z是倒着的