gpt4 book ai didi

c++ - (int)-2147483648 除以 (int)-1 的结果,使用不同的编译器?

转载 作者:行者123 更新时间:2023-11-30 20:28:04 25 4
gpt4 key购买 nike

众所周知,最小的整数根据编译器的不同而不同,所以我有这样的问题: (int)-2147483648 的结果是什么?除以(int)-1当你使用各种编译器时你会得到什么?比如VC6.0、VS2010等?

最佳答案

首先,我们假设我们处于 32-bit 中具有二进制补码表示的系统其中 INT_MIN值与 -INT_MAX - 1 相同.

这个表达式:

(int) -2147483648 / (int) -1

相当于

(int) -2147483648 / -1

-1已经是 int 类型.

32-bit二进制补码系统,其中 INT_MAX2147483647 ,值2147483648类型为long 1) 因为它不能在 int 中表示。 -2147483648的值也是 long 类型.

long-2147483648可以用 int 表示,以及(int) -2147483648整数转换后的值是 INT_MIN .

原始表达式相当于(在我们的假设下):

INT_MIN / -1

这个表达式相当于INT_MAX + 1这在 int 中是无法表示的。确实int类型范围从 INT_MININT_MAX 。该表达式是整数溢出,整数溢出会调用 C 中未定义的行为。

(C99, 6.5p5) "If an exceptional condition occurs during the evaluation of an expression (that is, if the result is not mathematically defined or not in the range of representable values for its type), the behavior is undefined."

<小时/><子>

1) 我们隐含地假设LONG_MAX> INT_MAX ,否则值为 2147483648类型为long long

关于c++ - (int)-2147483648 除以 (int)-1 的结果,使用不同的编译器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14070524/

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