为什么02000评估为1024

时间:2018-06-28 05:18:22

标签: php c++ zero arithmetic-expressions

出于好奇,我编写了这样的程序:

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是预期的

3 个答案:

答案 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。