当数字附加零时,无符号数字显示不同的结果[重复]

Posted

技术标签:

【中文标题】当数字附加零时,无符号数字显示不同的结果[重复]【英文标题】:Unsigned Number displays different results when a zero is appended to the number [duplicate] 【发布时间】:2018-03-21 21:07:21 【问题描述】:

当无符号数从 '437' 更改为 '0437' cout 语句时,为什么这个程序会显示 2 个不同的数字?当我输入 437 时,cout 显示 437,但是当我使用“0437”时,它显示“287”。为什么会这样?

int main()

    unsigned number = 437;
    cout<<number<<endl;
    return 0;

【问题讨论】:

因为前导 0 将其转换为八进制整数文字 如何摆脱烦人的八进制整数文字?请 寻找不同的语言。 前面不要加0? 你不会摆脱八进制文字。没有理由写 01234 除非你想要一个八进制文字。如果你想要 1234,你只需写 1234 【参考方案1】:

因为八进制文字表示的值在标准输出上被打印为十进制值。如果要输出八进制文字值,则应使用 std::oct 流操纵器:

std::cout << std::oct << number;

整数值由integer literals 表示。它们可以是八进制(例如0437)、十进制(例如287)或十六进制(例如0x11f),从C++14 开始,它们可以是二进制文字(例如0b100011111)。所有这些文字都代表相同的值。

【讨论】:

您可以将0b100011111 作为二进制文字版本添加到其中。 那个编辑好多更好!我撤回了我的反对票。 @JesperJuhl 确实如此。已更新。 @MartinBonner 感谢您的反馈。原作确实有些拙劣。

以上是关于当数字附加零时,无符号数字显示不同的结果[重复]的主要内容,如果未能解决你的问题,请参考以下文章

有符号/无符号字符之间的区别[重复]

有符号/无符号比较给出了意想不到的结果[重复]

为啥在有符号和无符号表示之间转换一个数字?

2021-09-11:给你一个32位的有符号整数x,返回将x中的数字部分反转后的结果。反转后整数超过 32 位的有符号整数的范围就返回0,假设环境不允许存储 64 位整数(有符号或无符号)。(代码片段

从无符号字符到 std::string 的 C++ 转换 [重复]

如何将带有尾随x的数字字符串转换为无符号数字列表