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