永发信息网

诡异输出。。。高手进

答案:2  悬赏:60  手机版
解决时间 2021-08-18 04:28
  • 提问者网友:刺鸟
  • 2021-08-17 14:25
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耶
最佳答案
  • 五星知识达人网友:话散在刀尖上
  • 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.

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯