为什么这道题选B的:以下程序运行的结果是,还有啊,答案解析说的65和66是拿来的? 我都看不懂得??啥意思

[复制链接]
查看11 | 回复2 | 2011-1-17 21:27:48 | 显示全部楼层 |阅读模式
以下程序运行的结果是
union xyz
{
int age;
char state;
float score;
};
main()
{
union xyz x={16706};
printf("%c",x.state);
getch();
}
答案是这样解析的:本题中的共用体变量x需4个字节,当赋值x={16706}时,在其前面两个字节中分别存入66和65,则共用体成员为66,即大写字母B,
漏了,选项是:A.A
B.B
C.C
D.D
l楼下的解析还是不明白,有谁能详细一点吗,为什么要转换成二进制呢?

回复

使用道具 举报

千问 | 2011-1-17 21:27:48 | 显示全部楼层
16706/256=65,余66,即16706=65*256+66=65*2的8次方+668是最低位字节的二进制位数,如果不理解 换一种说法, 16706>>8位得到的就是高位三个字节的值,而右移8位就等于16706/2的8次方所以16706转换成二进制后三个高位的字节值为65,最低位字节的值为66即从高到低
0000000000000000 01000001
01000010printf("%c",x.state);只输出最低位字节01000010所表示的字符
回复

使用道具 举报

千问 | 2011-1-17 21:27:48 | 显示全部楼层
因为state只占一个字节 一个字节等于8个二进制数将16706换算成二进制数取最低位的一组8个二进制数转化成十进制得到66也就是state所占的一个字节我是这么理解的 有错误请指出
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行