结构体的输出

发布于 2022-09-01 15:18:49 字数 346 浏览 18 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

鸠魁 2022-09-08 15:18:49

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输出的当然是乱码。。。

北风几吹夏 2022-09-08 15:18:49

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文