gpt4 book ai didi

c++ - 为什么 -2147483648 和 (int)-2147483648 不同

转载 作者:可可西里 更新时间:2023-11-01 17:22:59 26 4
gpt4 key购买 nike

当我在 Windows7 x64 下运行以下代码时,使用 MinGW 的 GCC 编译,结果似乎是下溢:

cout<<-2147483648 ;    //Output: 2147483648

但是当我把它赋值给一个整数变量,或者只是简单地将它转换为 int 类型时:

cout<<(int)-2147483648 ; //Output: -2147483648 

那么,我以前版本的代码有什么问题?不是int类型吗?或者 Integer 的下界到底是多少?非常感谢。

最佳答案

2147483648 不适合您系统上的 int 或 long,因此它被视为 unsigned long 类型的常量。 (编辑:正如 ouah 在评论中指出的那样,它是标准 C++ 中的未定义行为,但您的编译器将其作为扩展接受。)否定无符号整数值是可能的,但会产生另一个无符号整数值,而不是负数。否定 2147483648UL 会产生 2147483648UL(假设在您的系统中,unsigned long 是 32 位类型)。

将其转换为 int 会产生一个实现定义的结果,通常是您看到的结果,但不一定。你可以通过写-2147483647 - 1 得到你想要的结果而不需要任何转换。

关于c++ - 为什么 -2147483648 和 (int)-2147483648 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12620753/

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