当前位置: 首页 > 知识库问答 >
问题:

运行时错误:有符号整数溢出:2147483647 1无法在类型“int”中表示

裴哲
2023-03-14

当我在参数n的值为2147483647时执行下面的代码时,我从if阶段得到错误(运行时错误:有符号整数溢出:2147483647 1不能在类型“int”中表示)。但是打印了“INT_MAX”。你能解释为什么我会得到这个错误吗?

class Solution {
public:
    int myFunct(int n) {
        if (n == INT_MAX) cout << "INT_MAX" << endl;
        
        return 0;
    }
};

共有1个答案

申屠飞
2023-03-14

从提供的代码片段中:

#include <iostream>

class Solution {
public:
    int myFunct(int n) {
        if (n == INT_MAX)
            std::cout << "INT_MAX" << std::endl;

        return 0;
    }
};

int main(void) {
    Solution s;
    // Here we are passing +1 than INT_MAX value
    // (i.e. overflowing 4-bytes integer)
    s.myFunct(INT_MAX + 1);

    return 0;
}

试图存储超出INT_MAX限制的值将导致溢出,并在运行时导致未定义的行为。既然是UB,它可能对你有用,但对我们没用。

也就是说,我的TDM-GCC 9.2.0编译器产生了以下错误:

main.cpp: In function 'int main()':
main.cpp:21:23: warning: integer overflow in expression of type 'int' results in '-2147483648' [-Woverflow]
   21 |     s.myFunct(INT_MAX + 1);
      |
 类似资料:
  • 我正在读一篇关于整数安全性的文章。以下是链接:http://ptgmedia.pearsoncmg.com/images/0321335724/samplechapter/seacord_ch05.pdf 在第166页,有这样一句话: 涉及无符号操作数的计算永远不会过流,因为不能由结果无符号整数类型表示的结果将被模化为比结果类型可以表示的最大值大一的数字。 这是什么意思?感谢您的回复。

  • 未定义行为的一个例子是在flow上的整数行为 有没有一个历史的或者(甚至更好!)造成这种差异的技术原因是什么?

  • 我正在练习Cay S.Horstmann的《Java SE 8 for the Really Impatient》一书中的练习。其中一个基于类中的改进的练习要求: 编写一个程序,使用< code>int值和无符号运算,对0和232 - 1之间的数进行加、减、除和比较。说明为什么需要< code>divideUnsigned和< code>remainderUnsigned。 问题是,如果您添加2个

  • 我正在简单的C程序中试验无符号int数据类型和主方法参数。作为一个实验,我写了一个程序,从命令行获取一个int数作为main方法的参数,并对该数和0之间的每个整数求和。 例如,程序计算 f(n) = (1 2 3... n) 当 n 时有效 我开始注意到的第一件事是当f(n) 我手动发现数学上的最大值,我的程序生成的结果将是有效的(例如,在整数溢出之前),对于有符号整数为65535,对于无符号in

  • 给定一个非空二叉树,求最大路径和。 对于这个问题,路径被定义为沿着父子连接从某个开始节点到树中任何节点的任何节点序列。路径必须包含至少一个节点,并且不需要经过根。 和 = 42 我是初学者。如果可能的话,只帮助cpp,我对逻辑非常清楚。我想知道我的数据类型知识有什么问题? 下面的maxpathsum函数必须返回int值,我使用long-long只是为了避免整数溢出,然后在返回最终答案之前进行类型转

  • 我有三种方法来补充给定的二进制数。第一 这是错误消息:运行时错误消息:第7行:Char 44:运行时错误:有符号整数溢出:-2147483648-1不能在类型“int”(solution.cpp)中表示摘要:UndefinedBehaviorSanitizer:undefined behavior prog_joined。cpp:16:44 最后执行的输入:2147483647