所以这就是问题:INT_MAX被定义为2 ^ 15 - 1.据我所知,如果我们操作超过32767的值,我们应该得到溢出.但为什么我这样做会得到正确答案
int r = 32767 + 10000;
Run Code Online (Sandbox Code Playgroud)
我得到了正确的结果!怎么不造成溢出?什么是int和double的最大数量,如果你超越它就会出现溢出.
谢谢!
INT_MAX定义为2 ^ 15-1
是吗?你打印过它并确认你的编译平台是这样吗?值2 15 -1仅是INT_MAX符合标准的C编译器的值的最小界限.
C11 5.2.4.2.1:1:
......它们的实现定义值的大小(绝对值)应等于或大于显示的值,并带有相同的符号.
...
- int类型对象的最大值
INT_MAX +32767 // 2 15 -1
INT_MAX定义为2 ^ 15 - 1
不一定 - 你在你的平台上仔细检查过吗?大多数时候它是2 ^ 31-1.
任何平台的最小值是2 ^ 15-1,但今天的大多数计算机将使用32或64位整数.