我遇到了有关C编程语言的客观问题。以下代码的输出应该是0 2
,但我不明白为什么。
请说明初始化过程。这是代码:
#include <stdio.h>
int main()
{
union a
{
int x;
char y[2];
};
union a z = {512};
printf("\n%d %d", z.y[0], z.y[1]);
return 0;
}
我将假设您使用一点endian系统,其中sizeofint
是4 bytes (32 bits)
,sizeof achar
是1 byte (8 bits)
,其中一个以2的补码形式表示整数。一个union
仅具有其最大成员的大小,并且所有成员都指向此确切的内存。
现在,您正在向该内存写入一个整数值512
。
512是二进制1000000000
。
或采用32位二进制补码形式:
00000000 00000000 00000010 00000000
。
现在将其转换为其小端序表示,您将获得:
00000000 00000010 00000000 00000000
|______| |______|
| |
y[0] y[1]
现在看到上面的内容,当您使用char
数组的索引访问它时会发生什么。
因此,y[0]
是00000000
其是0
,
和y[1]
是00000010
这是2
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句