这道题的输出是什么呢?为何
这道题的输出是什么呢?为什么?
------解决方案--------------------
------解决方案--------------------
帮楼上补充一下,小端情况下是0x0000 010a
------解决方案--------------------
看内存嘛
赋值
char[0]内存
0x0a
char[1]内存
0x01
int内存就是:
0x00 00 01 0a
这就是266
------解决方案--------------------
关键是Union会共享空间,你给char数组赋值的时候,其实就等于是给int i赋值了。当然仅从i的角度来看,这个是无法预估的值,因为你是给char数组赋值,而不是i。
------解决方案--------------------
这个得分系统,在windows系统是低字节在前,高字节在后,得出的结果是266(010A)
在linux系统是高字节在前,低字节在后,得出的结果是167837696(0A010000)
联合体的内存是共享的,所有变量共用一块内存,为最大内存空间变量的内存空间
------解决方案--------------------
这个还真不能这样说,-1217265398的16进制的64位值是FFFF FFFF B772010A。算32位的话,去掉前面的FFFF FFFF也就是B772 010A,你可以最后4位是 010A 和 你的设置是符合的。有问题的是前面的4位是B772,问题就在于你没给它指定值,所以他里面的值是无法保证的。你应该声明char[4],然后先全部清0,再赋值。
------解决方案--------------------
大端应该就是大尾端,是指:高位在低地址
小端应该就是小尾端,是指:尾位在低地址
如图:

union
{
int i;
char x[2];
}a;
void main()
{
a.x[0] = 10;
a.x[1] = 1;
printf("%d",a.i);
}
------解决方案--------------------
10转二进制 1010再左移1个字节(8位) 再转回十进制为256
再加10
所以为266
------解决方案--------------------
帮楼上补充一下,小端情况下是0x0000 010a
------解决方案--------------------
看内存嘛
赋值
char[0]内存
0x0a
char[1]内存
0x01
int内存就是:
0x00 00 01 0a
这就是266
------解决方案--------------------
关键是Union会共享空间,你给char数组赋值的时候,其实就等于是给int i赋值了。当然仅从i的角度来看,这个是无法预估的值,因为你是给char数组赋值,而不是i。
------解决方案--------------------
这个得分系统,在windows系统是低字节在前,高字节在后,得出的结果是266(010A)
在linux系统是高字节在前,低字节在后,得出的结果是167837696(0A010000)
联合体的内存是共享的,所有变量共用一块内存,为最大内存空间变量的内存空间
------解决方案--------------------
这个还真不能这样说,-1217265398的16进制的64位值是FFFF FFFF B772010A。算32位的话,去掉前面的FFFF FFFF也就是B772 010A,你可以最后4位是 010A 和 你的设置是符合的。有问题的是前面的4位是B772,问题就在于你没给它指定值,所以他里面的值是无法保证的。你应该声明char[4],然后先全部清0,再赋值。
------解决方案--------------------
问下,大端小端,高字节,低字节,大尾端,小尾端,的对应关系
这个得分系统,在windows系统是低字节在前,高字节在后,得出的结果是266(010A)
在linux系统是高字节在前,低字节在后,得出的结果是167837696(0A010000)
联合体的内存是共享的,所有变量共用一块内存,为最大内存空间变量的内存空间
大小端应该和系统无关吧,是硬件决定的吧。
大端应该就是大尾端,是指:高位在低地址
小端应该就是小尾端,是指:尾位在低地址
如图: