Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如果我们在最大可表示整数上加一,结果是负数吗?_C_Operators_Integer Overflow_Signed Integer - Fatal编程技术网

C 如果我们在最大可表示整数上加一,结果是负数吗?

C 如果我们在最大可表示整数上加一,结果是负数吗?,c,operators,integer-overflow,signed-integer,C,Operators,Integer Overflow,Signed Integer,此程序要求C实现回答一个简单的问题: 如果我们检查最大可表示整数INT\u MAX

此程序要求
C
实现回答一个简单的问题:

如果我们检查最大可表示整数INT\u MAX<0,并将其打印出来

printf ("%d\n", (INT_MAX) < 0);
并显示输出
1

为什么条件不变为假

另外,如果我们在最大的可再现整数上加一,结果是负数吗

如果我们在最大可表示整数上加一,结果是负数吗


否。无符号整数溢出。你可以观察到,好像它在2的补语表示中缠绕。但这只是特定于实现的行为,C标准绝对不能保证任何事情。

INT\u MAX
作为有符号值,
INT\u MAX+1
会导致有符号整数溢出,从而调用


包含UB的(ny)程序的输出(如果有)无法以任何方式进行调整。

未定义
INT\u MAX+1
的行为,因为您将溢出
有符号的类型

程序可以输出任何东西,或者编译器可以吃掉你的猫

(出于兴趣,这就是为什么您会将
-INT_MAX-1
视为2的补码系统上
INT_MIN
的定义。)

INT_MAX=0x7fffff
INT_MAX+1=0x8000000=-2147483648<0

谢谢你解决了我的问题。我认为这一定是溢出。@Bathsheba好的,这很混乱,让我把那部分放在外面。我在回答中断言这一定是溢出。欢迎你抄袭——你的答案通常比我的更全面。还有一卡车UB.Hmmm第13个答案,包括“吃你的猫”。希望你的小猫图标不会因为这些事情而紧张。@chux-Ha。是的,我想我说了很多。一只三叉戟猫应该加倍紧张。
#include <limits.h>
#include <stdio.h>

int main (void)
{
  printf ("%d\n", (INT_MAX+1) < 0);
  return 0;
}
INT_MAX = 0x7fffffff
INT_MAX + 1 = 0x80000000 = -2147483648 < 0