【问题标题】:Why the integer data types hexadecimal, octal and binary are getting converted to decimal type and then displayed in a browser?为什么整数数据类型十六进制、八进制和二进制被转换为十进制类型然后显示在浏览器中?
【发布时间】: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


【解决方案1】:

只有一种(整数)数字,数字的格式完全不重要。值052420x2A 都表示完全相同的值。 PHP 不记得数字是如何创建的;它不存储该信息,因为它是无用的信息,只会浪费存储空间。二进制、八进制和十六进制表示法只是为了方便您以最适合上下文的表示法表示数字;全部解析为相同值的int,然后默认以十进制输出。

【讨论】:

    猜你喜欢
    • 2015-09-06
    • 2011-08-21
    • 2013-11-07
    • 1970-01-01
    • 2016-12-25
    • 2014-12-15
    • 1970-01-01
    • 2018-04-21
    • 2015-12-12
    相关资源
    最近更新 更多