【发布时间】:2023-01-03 09:48:30
【问题描述】:
我一直试图了解数据是如何存储在 C 中的,但我感到很困惑。我有这段代码:
int main(){
int a;
char *x;
x = (char *) &a;
x[0] = 0;
x[1] = 3;
printf("%d\n", a);
return 0;
}
我一直在摆弄 x[0] & x[1],试图弄清楚它们是如何工作的,但我做不到。例如 x[1] = 3 输出 768。为什么?
我知道 int 中有 4 个字节(每个字节有 8 位),x[1] 指向第二个字节。但我不明白如何使第二个字节等于 3,意味着 a = 768。
我可以用二进制格式将其可视化:
字节 1:00000000
字节 2:00000011
字节 3:00000000
字节 4:00000000
但是 3 在哪里发挥作用呢?如何做字节 2 = 3,使其成为 00000011 或 768。
附加问题:如果让我在内存中存储545。 a[0] 和 a[1] = 什么?
我知道二进制布局是:
字节 1:00100001
字节 2:00000010
字节 3:00000000
字节 4:00000000
【问题讨论】:
-
768 = 512 + 256 = 2^9 + 2^8...这有帮助吗?
-
请注意,如今在许多机器上,键入
int是 4 个字节(32 位),因此在您的示例代码中,您需要添加x[2] = x[3] = 0;以获得一致的结果。 -
@SteveSummit ... 或
int a = 0;强调口头禅“总是初始化变量”:-) -
我仍然看不出 3 在哪里发挥作用。但我想我想出了一个方法。只需以二进制形式将其写出,然后通过对所有字节使用第一个字节 (1,2,...128) 的小数位数将其转换为 denary。所以对于 768,第二个字节是 00000011,这在第一个字节 (1-128) 的范围内等于 3,所以第二个字节 = 3。
标签: c memory memory-management integer byte