字符’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?
那个高位低位不太清楚,请详细讲一下过程把,谢谢了 展开
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?
那个高位低位不太清楚,请详细讲一下过程把,谢谢了 展开
4个回答
展开全部
咱一般用的电脑是小端模式,即数据的高字节存储在高地址中,而数据的低字节存放在低地址中,对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’。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个貌似和高低位关系不大,在int[0]中存的是0x39,也就是十进制的57,所以在char[0]中存的就是十进制的57,打印的是字符型,字符9对应的ascii码就是57,所以打印出9。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
应该是%d输出吧?
%c不会是9,ASCII码是9,是一个不可见字符
%c不会是9,ASCII码是9,是一个不可见字符
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询