首页 > 结构体的输出

结构体的输出

#include <iostream>

using namespace std;

union V
{
    struct X
    {
        unsigned char s1:2;
        unsigned char s2:3;
        unsigned char s3:3;
    }x;
    unsigned char c;
}v;
int main(){

    v.c = 100;
    cout<<v.x.s3<<endl;
    return 0;
}

请问结构体中的s1,s2,s3表示是什么意思?位数吗?输出的怎么是乱码?


s1后面的:表示s1只占unsigned char2个bit,那么s1的取值范围是[0, 3]
s2,s3同理
那么整个struct x只占一个字节,你可以sizeof确认一下

好了,现在v.c=100后s1,s2,s3分别是多少呢?
100用8位二进制表示是01100100,再假设当前CPU是小端模式的,那么s1=00b,s2=001b,s3=011b
所以s3输出的当然是乱码。。。


联合体是静态区域里的,你的区域并没有初始化或者没有定义值,那么值就属于随机的,至于s1,s2,s3可以参考一下联合体的定义

【热门文章】
【热门文章】