字符’0’的ASCII码的十进制数为48,且数组的第0个元素在低位,则以下程序的输出结果是

#includemain(){union{inti[2];longk;charc[4];}r,*s=&r;s->i[0]=0x39;s->i[1]=0x38;printf... #include
main( )
{ union { int i[2]; long k; char c[4]; }r,*s=&r;
s->i[0]=0x39;
s->i[1]=0x38;
printf("%c\n",s->c[0]) }
A.39
B.9
C.38
D.8
为什么选B?
那个高位低位不太清楚,请详细讲一下过程把,谢谢了
展开
 我来答
义昀欣ek
推荐于2018-03-11 · TA获得超过3298个赞
知道小有建树答主
回答量:6776
采纳率:0%
帮助的人:2174万
展开全部
因为这里r是一个联合,联合里面包含了很多成员但是每次却只能用其中的一个。
在给里面的i赋值后,程序却要打印c的值。此时,c中是没有值的,但因为i和c都是数组,代表的是数组首地址,所以此时打印c会将i中的值强制以char型打印出来。

于是,c[0]作为字符打印0x39这个值,因为0x39的十进制是57,刚好是字符‘9’的ascII码。于是打印结果是9.
jgzhen125
2010-08-12 · 超过14用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:41万
展开全部
咱一般用的电脑是小端模式,即数据的高字节存储在高地址中,而数据的低字节存放在低地址中,对union型的成员的存取都是相对于该联合体基地址的偏移量为0处开始,也就是联合体的访问不论对哪个变量的存取是从uion的首地址位置开始的。低字节是0x39即十进制57,转换成字符是57-48 = 9,所以以字符形式输出的结果为‘9’。从高位到低位内存中存取的二进制数是0x 00 00 00 38 00 00 00 39,共八个字节。s->c[0]是第四字节的最低字节,即0x39,即二进制数0011 1001,转换成ASCII码就是字符‘9’所以最终结果是‘9’。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8e8a51363
2010-08-11 · 超过13用户采纳过TA的回答
知道答主
回答量:34
采纳率:0%
帮助的人:48.6万
展开全部
这个貌似和高低位关系不大,在int[0]中存的是0x39,也就是十进制的57,所以在char[0]中存的就是十进制的57,打印的是字符型,字符9对应的ascii码就是57,所以打印出9。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d3e418b2c
2010-08-11 · TA获得超过2195个赞
知道大有可为答主
回答量:1361
采纳率:0%
帮助的人:1703万
展开全部
应该是%d输出吧?
%c不会是9,ASCII码是9,是一个不可见字符
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式