结构体的输出

#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表示是什么意思?位数吗?输出的怎么是乱码?

阅读 4k
2 个回答

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可以参考一下联合体的定义

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进