gcc(TDM-GCC)中的无符号整数溢出错误

unsigned integer overflow error in gcc(TDM-GCC)?

本文关键字:无符号整数 溢出 错误 TDM-GCC gcc      更新时间:2023-10-16
#include <iostream>
#include <climits>
#include <cinttypes>
using namespace std;
int main()
{
    uint16_t i = 0;
    cout << USHRT_MAX << 'n' << i - 1 << 'n';
    return 0;
}

输出

65535
-1

我期望两个相等的输出,但事实并非如此。这不是不符合标准的行为吗?

*系统: 视窗7

*编译选项: g++ -o $(文件名NoExt( $(文件名( -std=c++11 -wall -wextra

当C++看到表达式时

i - 1

它会自动将 i 和 1 提升为int类型,因此表达式的结果是int,因此输出为 -1。

要解决此问题,请将表达式的总体结果转换回 uint16_t ,或者执行类似操作

i--;

以就地修改i,然后打印i

希望这有帮助!

i

求值被提升为一个int i - 1,所以表达式i - 1本身被求值为有符号整数(int(,try:

cout << USHRT_MAX << 'n' << (uint16_t)(i - 1) << 'n';

现场演示