返回信息流# include<stdio.h>
union
{
int i;
char x[2];
}a;
void main
{
a.x[0]=10;
a.x[1]=1;
printf("%d",a.i);
}
答案是266,不明白.
这是一条镜像帖。来源:北邮人论坛 / soft-design / #17214同步于 2007/4/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
另外一个:# include<stdio.h> union
BUBUBU
2007/4/30镜像同步14 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 BUBUBU 的大作中提到: 】
: # include<stdio.h>
: union
: {
: int i;
: char x[2];
: }a;
:
: void main
: {
: a.x[0]=10;
: a.x[1]=1;
: printf("%d",a.i);
: }
char 占8位,int占32位。
1*2^8=256,256+10=266
a的占用4个字节的内存
16进制表示如下:
00 00 00 00
a.x[0] = 10;之后变成
00 00 00 0A
a.x[1] = 1;之后变成
00 00 01 0A
0x10A的10进制表示就是266
【 在 BUBUBU (布布) 的大作中提到: 】
: 标 题: 另外一个:# include<stdio.h> union
: 发信站: 北邮人论坛 (Mon Apr 30 21:44:52 2007), 站内
:
: # include<stdio.h>
: union
: {
: int i;
: char x[2];
: }a;
:
: void main
: {
: a.x[0]=10;
: a.x[1]=1;
: printf("%d",a.i);
: }
:
: 答案是266,不明白.
: --
: 昨天,你想得到他,
: 明天,你又害怕得到他。
: 昨天,你怕得到他,
: 明天,你怕失掉他。
: 得到也许就是失去;
: 唯有爱,让人在失去和得到之间惆怅。
:
:
: ※ 来源:·北邮人论坛 http://forum.byr.edu.cn·[FROM: 59.64.206.*]
【 在 coolfantasy 的大作中提到: 】
: a的占用4个字节的内存
: 16进制表示如下:
: 00 00 00 00
: ...................
cool cool
我认为cool fantasy所说的有些问题
具体是高字节在前还是低字节在前,因操作系统而异。
其中,低字节在前的叫做little endian,高字节在前的叫做big endian
a的占用4个字节的内存
16进制表示如下:
00 00 00 00
a.x[0] = 10;之后变成
0A 00 00 00
a.x[1] = 1;之后变成
0A 01 00 00
这4个字节,在little endian的系统上,如果整体作为一个int来看,就表示0x0000010A
0x10A的10进制表示就是266
但是,对于big endian来说就是0x0A010000
10进制就是167837696
而这又是假设int的长度是32bit的前提下得出的结论。如果int是16bit,或者64bit,又不一样了。
而除了big endian和little endian以外,还有各种古怪的endianness,比如高字节在中间的。
因此,这个程序的结果是因系统而异的,不能确定是266。
【 在 coolfantasy 的大作中提到: 】
: a的占用4个字节的内存
: 16进制表示如下:
: 00 00 00 00
: ...................
的确有大小端的问题
所以我没说在内存中的布局就是那个样子
【 在 wks (cloverprince) 的大作中提到: 】
: 我认为cool fantasy所说的有些问题
: 具体是高字节在前还是低字节在前,因操作系统而异。
: 其中,低字节在前的叫做little endian,高字节在前的叫做big endian
: ...................
cool学长说的没问题的。。。
由于C的跨平台特性。。。little endian和big endian都会是266。。。
因为两者的对齐方式不同啊。。。所以C编译在处理Union和Struct这种需要数据对齐的数据结构的时候会依照硬件平台的内存特性进行内存对齐
在这里就是说little endian 存成OA 01 00 00是0x0000010A
big endian 存成00 00 01 0A还是0x0000010A
【 在 wks (cloverprince) 的大作中提到: 】
: 我认为cool fantasy所说的有些问题
: 具体是高字节在前还是低字节在前,因操作系统而异。
: 其中,低字节在前的叫做little endian,高字节在前的叫做big endian
: ...................