gpt4 book ai didi

c++ - 在 C/C++ 中不可能否定 -2147483648?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:50:11 26 4
gpt4 key购买 nike

#include <iostream>
#include <stdlib.h>

int main(int argc, char *argv[])
{

int num=-2147483648;
int positivenum=-num;
int absval=abs(num);

std::cout<<positivenum<<"\n";
std::cout<<absval<<"\n";

return 0;
}

你好我很好奇为什么上面代码的输出是

-2147483648
-2147483648

现在我知道 -2147483648 是有符号整数中最小的可表示数(假设 int 是 32 位)。我原以为只有在我们低于这个数字之后才会得到垃圾答案。但在这种情况下,+2147483648 包含在 32 位整数系统中。那么为什么在这两种情况下都是否定的答案呢?

最佳答案

But in this case, +2147483648 IS covered by the 32 bit system of integers.

不太正确。它只会上升到 +2147483647。所以你的假设是不对的。

取反 -2147483648 确实会产生 2147483648,但它会溢出回 -2147483648

此外,有符号整数溢出在技术上是未定义的行为。

关于c++ - 在 C/C++ 中不可能否定 -2147483648?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8372049/

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