void main(void) { union { char s[2]; int i; }a; a. i=ox1234 printf("%x,%x\n",a.s[0],a.s[1]); } 结果
voidmain(void){union{chars[2];inti;}a;a.i=0x1234;printf("%x,%x\n",a.s[0],a.s[1]);}//因...
void main(void)
{
union {
char s[2];
int i;
}a;
a. i=0x1234;
printf("%x,%x\n",a.s[0],a.s[1]);
}//因为我没有学过计算机体系结构,一楼和三楼能不能具体解释一下什么是低字节优先和高字节优先?为什么这里不遵循高字节优先?取决于什么?这一类的程序设计题有没有什么一般规律?比如如果我没有对a.i赋值,而是对a.s[1]a.s[2]分别赋值12,34,这样就不是两个字节,而是分别赋一个字节,这种情况下还存在低字节优先吗?输出的a,i还是不是1234? 展开
{
union {
char s[2];
int i;
}a;
a. i=0x1234;
printf("%x,%x\n",a.s[0],a.s[1]);
}//因为我没有学过计算机体系结构,一楼和三楼能不能具体解释一下什么是低字节优先和高字节优先?为什么这里不遵循高字节优先?取决于什么?这一类的程序设计题有没有什么一般规律?比如如果我没有对a.i赋值,而是对a.s[1]a.s[2]分别赋值12,34,这样就不是两个字节,而是分别赋一个字节,这种情况下还存在低字节优先吗?输出的a,i还是不是1234? 展开
2个回答
展开全部
应该是低字节优先的原因。。。
虽然i是0x1234,但在内存中按顺序是 0x34(低字节) 0x12(高字节)
34即为s[0]的位置,12即为s[1]的位置。
虽然i是0x1234,但在内存中按顺序是 0x34(低字节) 0x12(高字节)
34即为s[0]的位置,12即为s[1]的位置。
追问
你好,谢谢您的回答,能不能继续帮我讲解一下
追答
低字节优先应该跟硬件设计的初衷有关吧,具体我也不是很清楚。。。
一个内存空间只能存一个字节,0x1234是两个字节,所以只能分开存。。。
单个字节不存在优先的问题,超过1个字节才有字节优先。。。
假如按你的意思: a.s[0] = 0x12; a.s[1] = 0x34;
那么a.i 就是 0x3412
展开全部
//1 改正程序如下:
#include <stdio.h>
void main(void)
{
union { char s[2]; int i; }a;
a. i=0x1234; //ox改为0x,而且末尾加分号。
printf("%x,%x\n",a.s[0],a.s[1]);
}
//运行结果:
34,12
请按任意键继续. . .
#include <stdio.h>
void main(void)
{
union { char s[2]; int i; }a;
a. i=0x1234; //ox改为0x,而且末尾加分号。
printf("%x,%x\n",a.s[0],a.s[1]);
}
//运行结果:
34,12
请按任意键继续. . .
更多追问追答
追问
为什么不是12,34
追答
在内存中,低字节0x34在前,高字节0x12在后。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |