c - 故意分配大于 INT_MAX 的 `i` 值时出现奇怪的行为

标签 c

当我分配i时值大于INT_MAX在此代码中 -

#include <stdio.h>
#include <limits.h>

int main()
{

   int i;
   i=INT_MAX+3;

   printf("%d \n",INT_MAX);  //INT_MAX = 2147483647

   if(i>INT_MAX) 
     {     
         printf("OVERFLOW");
     }
  else 
    {
         printf("%d",i);    
    }   
     return 0;
}

所以在此为 i=INT_MAX+3;那么条件为真且 overflow应该打印,但它打印一些 negative value 。这是未定义的行为吗?

最佳答案

  1. 是的,有符号整数溢出在 C 中具有未定义的行为。

  2. i > INT_MAX 对于任何 int i 来说都不是真的。如何使 int 大于可能的最大 int

关于c - 故意分配大于 INT_MAX 的 `i` 值时出现奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31627074/

相关文章:

c - 这两种方式在递归上有什么区别呢?

c - "Magic ring buffer"在Linux内核空间的实现?

c - 拨号连接端口

c - setsocketoptions L2CAP_OPTIONS 失败并显示 "Invalid argument error"

c - 比较字符与字符串(都是数组)并打印结果时遇到问题吗?

c - 指针数组的结构地址

c - 为什么 printf ("%d", ~a);当 a 等于 3 时显示 -4?

c - C中的文件I/O,无法删除以前写入的数据

c - 我调用这个函数错了吗?

c - 如何在C unix中使用空格分隔符分割字符串?