gpt4 book ai didi

c - 结构中的数组方向

转载 作者:太空狗 更新时间:2023-10-29 15:30:19 25 4
gpt4 key购买 nike

对于下面的 union 声明

union a
{
int i;
char ch[2];
};
union a u;
u.ch[0] = 3;
u.ch[1] = 2;

ich存放在同一个地方,i现在应该是 <binary rep. of 3>连接 <binary rep. of 2> .但是,它以相反的顺序存储。

printf("%d",i);

给出 515。为什么会这样??

最佳答案

因为你正在打印 %d 是数字。所以,你有:

u.ch[0] = 3;

二进制是

0000 0011  // 8bits, as char is 1B

然后你有

u.ch[1] = 2;

这是

0000 0010 // 8bits, as char is 1B

和“当你把 2 和 2 放在一起时”(:D)

  00..00                   0000 0010          0000 0011 // sizeof (int) * 8 bits
^^^^^^ ^^^^^^^^^ ^^^^^^^^^
//(sizeof(int)*8-16)bits this is the 2 this is the 3

12 月的 515


抱歉,我漏掉了“为什么”的部分。它是特定于平台的,您应该阅读 Endianness更具体地说 - 关于 Big-endian 和 Little-endian。文章中有一些例子。 提示:好像你有一台小端机器

好吧,我在这里总结一下我的评论:保证数组存储在连续内存中。 为了便于解释,我们假设 sizeof( int ) == 2。所以,你有

u.ch[0] = 3;
u.ch[1] = 2;

这将首先存储 3,然后在下一个字节中写入 2。所以,正如您(我猜)期望的那样,内存是:

0000 0011 0000 0010
^^^^3^^^^ ^^^^2^^^^

但请记住您使用的是 union!然后你打印 int。所以,这个 int 有相同的位:

0000 0011 0000 0010

并且您的机器是小字节序的,它将此“翻译”为:

0000 0010 0000 0011 (reversed order of the bytes!)

515的二进制表示是什么

关于c - 结构中的数组方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8254208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com