如果我将 int 设置为等于 2 个最大整数的总和会发生什么

What happens if I set an int equal to the sum of the 2 largest ints?

本文关键字:整数 什么 int 设置 如果      更新时间:2023-10-16
int sum; 

int N 表示的最大数是 2^0 + 2^1 + ... + 2^(sizeof(int)*8-1)。如果我设置 sum = N + N 会发生什么?我对编程有点陌生,只是让你新来。

如果int加法的结果超出了可以用int表示的值范围(INT_MIN.. INT_MAX ),您有一个溢出

对于有符号整数类型,整数溢出的行为是未定义的。

在许多实现中,你通常会得到一个结果,它忽略数学结果中除低阶N位之外的所有位(其中N是int中的位数)一致 - 但语言不能保证这一点。

此外,允许编译器假定代码的行为已定义,并基于该假设执行优化。

例如,在 clang++ 3.0 中,这个程序:

#include <climits>
#include <iostream>
int max() { return INT_MAX; }
int main()
{
    int x = max();
    int y = x + 1;
    if (x < y) {
        std::cout << x << " < " << y << "n";
    }
}

使用 -O0 编译时不打印任何内容,但打印

2147483647 < -2147483648

使用 -O1 或更高版本编译时。

总结:不要那样做。

(顺便说一下,类型 int 的最大可表示值更简单地表示为 2 N-1-1,其中 N 是以 int 类型的位为单位的宽度- 或者更简单地说是 INT_MAX 。对于具有 32 位int的典型系统,即 231-12147483647 。您还假设sizeof以 8 位为单位;事实上,它以 CHAR_BIT 位为单位,其中CHAR_BIT至少为 8,但(很少)可以更大。

您将有一个整数溢出,因为该数字对于int来说太大了,如果要执行此操作,则必须将其声明为long

希望这有帮助