gpt4 book ai didi

c - 在 C 语言中将较窄的数据类型存储为较宽的数据类型的正确方法是什么?

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

我目前正在修复 C 代码中的遗留错误。在修复此错误的过程中,我将一个unsigned int 存储到一个unsigned long long 中。但令我惊讶的是,当我在 GCC 的 64 位版本上编译此代码时,数学停止工作。我发现问题在于,当我为 long long 分配一个 int 值时,我得到一个看起来像 0x0000000012345678 的数字,但是在 64 位机器上,那个数字变为 0xFFFFFFFF12345678

有人可以向我解释或指出某种规范或文档,说明在将较小的数据类型存储在较大的数据类型中时应该发生什么,以及在 C 中执行此操作的合适模式是什么?

更新 - 代码示例

这是我正在做的:

// Results in 0xFFFFFFFFC0000000 in 64 bit gcc 4.1.2
// Results in 0x00000000C0000000 in 32 bit gcc 3.4.6
u_long foo = 3 * 1024 * 1024 * 1024;

最佳答案

我认为你必须告诉编译器右边的数字是无符号的。否则它认为它是一个普通的有符号整数,并且由于设置了符号位,它认为它是负数,然后将其符号扩展到接收器中。

所以在右边做一些无符号的转换。

关于c - 在 C 语言中将较窄的数据类型存储为较宽的数据类型的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25024204/

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