出于好奇,我编写了这样的程序:
auto number1 = 100;
auto number2 = 02000;
auto number3 = 2;
auto result = (number1 + number2) / number3;
std::cout << result;
有趣的是,程序输出562。因此,在Visual Studio中,我将鼠标悬停在变量“ number2”上,并显示(int) 1024
。我不明白为什么会这样。因此,我在php中尝试了等效的方法:
$number1 = 100;
$number2 = 02000;
$number3 = 2;
$result = ($number1 + $number2) / $number3;
echo $result;
结果是相同的562。我丢失了什么,因为如果我删除number2前面的零以使其为“ 2000”,则显示1050是预期的
答案 0 :(得分:4)
它将02000视为八进制数字,并转换为十进制。以0开头的任何东西都被视为八进制数字。
0 2 0 0 0 = 0*8*8*8*8 + 2*8*8*8 + 0*8*8 + 0*8 + 0
= 0 + 2*512 + 0 + 0 + 0
= 1024
现在1024是数字2。
result = (100 + 1024)/2
= 1124/2
= 562
答案 1 :(得分:1)
使用自动方式, Number2以八进制数开头,因为它以0 开头。
所以number2 = 1024,number1 = 100和number3 = 2。
这就是为什么结果为562的原因。
编辑:
学到了新东西!汽车与这里无关!它只是前面的0。
答案 2 :(得分:0)
在PL编号系统约定中,Hemil Hemil如果您使用“零”作为前缀,则数字将被视为八进制数字,但是编译器会将其转换为十进制数字系统,并以十进制输出。 02000以八进制表示,其十进制值为1024。