【发布时间】:2018-04-26 08:30:48
【问题描述】:
我正在使用 PHP 7.1.11
我正在关注 PHP 代码:
<?php
$a = 0123; // an octal number (equivalent to 83 decimal)
$b = 0x1A; // a hexadecimal number (equivalent to 26 decimal)
$c = 0b11111111; // a binary number (equivalent to 255 decimal)
var_dump($a); //Output : int(83) int(26) int(255)
var_dump($b); //Output : int(26) int(255)
var_dump($c); //Output : int(255)
?>
我的问题是为什么八进制、十六进制和二进制整数数据类型中包含的数据会被转换为十进制,然后与新的数据类型整数一起显示在浏览器中?
为什么不显示变量的原始值,也不显示它们的原始数据类型?
为什么会有转换步骤,谁这样做是出于什么原因?
如果我们采用其他数据类型生命 boolean、float、string 就不会发生这种情况。一切都按预期工作,那么为什么这些整数数据类型会发生这种奇怪的事情?
【问题讨论】:
-
即使八进制数也是整数,二进制数也是整数等...没有子类型 - 八进制整数。它所做的只是显示您创建的值。
-
@NigelRen :八进制、二进制和十六进制都是我知道的整数,但为什么它们被转换为十进制整数并失去原来的八进制、十六进制和二进制上下文?这是我的问题。
-
我更新了我的评论说 - 没有整数的子类型之类的东西,它们都在内部以二进制表示。它们只是以十进制显示,因为这是大多数人想要的。
-
@NigelRen :那么将表示八进制(0)、十六进制(0x)和二进制(b)的符号添加到 PHP 核心的目的是什么,因为它们最终将转换为十进制?
-
这是一种方便程序员在设置数据时使用不同数字基数的方法。因此,如果您在 *nix 中使用(例如)文件权限 - 0760 比 496 更有意义,尽管它们的值相同。
标签: php types type-conversion integer var-dump