#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我期待着两个相同的结果,但事实并非如此。这难道不是一种不符合标准的行为吗?
*系统: Windows7
*编译选项: g++ -o $(FileNameNoExt) $(FileName) -std=c++11 -Wall -Wextra
发布于 2014-09-02 23:43:09
当C++看到表达式时
i - 1它自动将i和1提升到int类型,因此表达式的结果是int,因此输出为-1。
要解决这个问题,可以将表达式的总体结果转换回uint16_t,或者执行以下操作
i--;若要就地修改i,请打印i.
希望这能有所帮助!
发布于 2014-09-02 23:43:30
i在计算i - 1之前被提升为int ,因此表达式i - 1本身被计算为有符号整数(int),请尝试:
cout << USHRT_MAX << '\n' << (uint16_t)(i - 1) << '\n';Live Demo
https://stackoverflow.com/questions/25634023
复制相似问题