You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何无符号数从437改为0437时,C++程序输出不同结果?

为什么把unsigned变量赋值从437改成0437后输出变成287?

这其实是C++里整数字面量的进制规则在搞鬼!

当你写437的时候,它是标准的十进制(base-10)整数,所以输出就是437,没啥问题。但一旦给数字加上前缀0,比如0437,C++就会把它当成**八进制(base-8)**整数来解析了。

八进制数的每一位取值范围是0-7,转换为十进制的计算方式是:
0437 = 4*(8²) + 3*(8¹) +7*(8⁰) = 464 +38 +7*1 = 256 +24 +7 = 287

这就是为什么cout输出变成287的原因啦。

顺带提一句:如果是前缀0x或者0X,那就是十六进制(base-16)整数了,比如0x1B5转换为十进制就是437(116² +1116 +5=256+176+5=437),感兴趣可以试试~

内容的提问来源于stack exchange,提问作者C_newb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:44:03