首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GCC中的无符号整数溢出错误(TDM-GCC)?

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

Stack Overflow用户
提问于 2014-09-02 23:41:15
回答 2查看 281关注 0票数 2
代码语言:javascript
复制
#include <iostream>
#include <climits>
#include <cinttypes>
using namespace std;

int main()
{
    uint16_t i = 0;
    cout << USHRT_MAX << '\n' << i - 1 << '\n';
    return 0;
}

输出

代码语言:javascript
复制
65535
-1

我期待着两个相同的结果,但事实并非如此。这难道不是一种不符合标准的行为吗?

*系统: Windows7

*编译选项: g++ -o $(FileNameNoExt) $(FileName) -std=c++11 -Wall -Wextra

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-02 23:43:09

当C++看到表达式时

代码语言:javascript
复制
i - 1

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

要解决这个问题,可以将表达式的总体结果转换回uint16_t,或者执行以下操作

代码语言:javascript
复制
i--;

若要就地修改i,请打印i.

希望这能有所帮助!

票数 2
EN

Stack Overflow用户

发布于 2014-09-02 23:43:30

i在计算i - 1之前被提升为int ,因此表达式i - 1本身被计算为有符号整数(int),请尝试:

代码语言:javascript
复制
cout << USHRT_MAX << '\n' << (uint16_t)(i - 1) << '\n';

Live Demo

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25634023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档