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

标签 c++ c compiler-construction integer

众所周知,最小的整数根据编译器的不同而不同,所以我有这样的问题: (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/

相关文章:

使用 LLVM2 编译时,iOS App 在 3.1.3 下崩溃

actionscript-3 - 向 AVM2 添加语言

compiler-construction - Jison 全局变量

c++ - 异常错误 : Access violation reading location 0xDDDDDDDD

c++ - 在 OMNET++ 中收到来自前一个模块的所有消息后,如何将一个消息发送到下一个模块

c++ - std::swap 只读引用的错误分配

c++ - 在/C++ 中明智地追加数据列

c - 为什么下面的代码会出现内存不足的情况?

C fork 和 pipe 多进程

c - C 中的外部声明二维数组?