相关疑难解决方法(0)

C++整数溢出

我刚刚开始自学C++,并开始学习整数溢出.出于好奇,我写了一些测试,只是为了看看某些整数值会发生什么.

这是我的计划:

#include <iostream>

int main()
{
    int x(0);
    std::cout << x << std::endl;

    x = x + 2147483647;
    std::cout << x << std::endl;

    x = x + 1;
    std::cout << x << std::endl;
    std::cout << std::endl;

    unsigned int y(0);
    std::cout << y << std::endl;

    y = y + 4294967295;
    std::cout << y << std::endl;

    y = y + 1;
    std::cout << y << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

0
2147483647
-2147483648

0
4294967295
0
Run Code Online (Sandbox Code Playgroud)

输出让我感到有些惊讶,我想知道是否有人可以解释为什么会发生这种情况,或者如果这些结果出乎意料的话,这是预期的; 所以这可能只是我特定机器的结果.

c++ integer-overflow

1
推荐指数
2
解决办法
3916
查看次数

哪些“C”实现不实现有符号整数的模运算?

参考C11 草案,第 3.4.3 节C11 草案,第 H.2.2 节,我正在寻找实现除有符号整数的模运算以外的行为的“C”实现。

具体来说,我正在寻找这是默认行为的实例,可能是由于底层机器架构。

这是一个代码示例和终端会话,说明了有符号整数的模算术行为:

overflow.c

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

int main(int argc, char *argv[])
{
    int a, b;
    printf ( "INT_MAX = %d\n", INT_MAX );
    if ( argc == 2 && sscanf(argv[1], "%d,%d", &a, &b) == 2 ) {
        int c = a + b;
        printf ( "%d + %d = %d\n", a, b, c );
    }
    return 0;
}

Run Code Online (Sandbox Code Playgroud)

终端会话:

$ ./overflow 2000000000,2000000000
INT_MAX = 2147483647
2000000000 + 2000000000 …
Run Code Online (Sandbox Code Playgroud)

c integer-overflow modulo undefined-behavior

-1
推荐指数
1
解决办法
98
查看次数

标签 统计

integer-overflow ×2

c ×1

c++ ×1

modulo ×1

undefined-behavior ×1