为何无符号数从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
相关产品推荐
相关产品推荐

