union U
{
struct S
{
unsigned char a : 3;
unsigned char b : 3;
unsigned char c : 2;
}s;
unsigned char c;
};
int main( )
{
U u;
u.c = 100;
cout << (int)u.s.c << endl;
}
输出1耶
诡异输出。。。高手进
答案:2 悬赏:60 手机版
解决时间 2021-08-18 04:28
- 提问者网友:刺鸟
- 2021-08-17 14:25
最佳答案
- 五星知识达人网友:话散在刀尖上
- 2021-08-17 14:52
10换成二进制是 01100100
分成 3 3 2 就是 100 100 01
u.s.a = 100即4
u.s.b = 4
u.s.c = 1
全部回答
- 1楼网友:拜訪者
- 2021-08-17 15:44
不诡异,这很正常。对于联合体,其中的变量是公用同一块内存的,又因为100的二进制表示是:01100100,但是在Intel处理器中的存储形式却是地位在前高位在后的。所以在结构体S中是从后往前取二进制值的,后三位100->4,再三位100->4,再两位01->1,所以结构体S中的结果就是a=4,b=4,c=1.
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯