gcc(TDM-GCC)中的无符号整数溢出错误
unsigned integer overflow error in gcc(TDM-GCC)?
#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';
现场演示
相关文章:
- C++中无符号字符溢出
- 如何打印boost多精度128位无符号整数
- C++模板函数,用于比较任何无符号整数和有符号整数
- 在线程中读取无符号整数时,c++ 位是否以原子方式切换?
- Constexpr 可变参数模板,用于对无符号整数进行重新排序
- 为什么 Clang 和 GCC 中两个无符号整数之和的结果类型不同
- 从 std::string 转换为 const 无符号整数
- 迭代器和无符号整数的重载 + 运算符
- C++,概念不适用于无符号整数作为结果类型?
- 在C++中,将无符号整数转换为八进制表示,反之亦然的最佳方法是什么
- 原子式清除无符号整数的最低非零位
- 计算机使用什么方法添加无符号整数
- 隐式转换双重到无符号长溢出 c++
- 运行时错误:有符号整数溢出:964632435 * 10 无法在类型 'int' 中表示
- gcc(TDM-GCC)中的无符号整数溢出错误
- 如何抑制来自UBsan的一些无符号整数溢出错误
- C/ c++无符号整数溢出
- 此代码如何产生无符号整数溢出
- 发生整数溢出时无符号整数和有符号整数的行为差异
- 如何检测无符号整数溢出