【问题标题】:why (int)08 is equal to 0, not 8? [duplicate]为什么 (int)08 等于 0,而不是 8? [复制]
【发布时间】:2018-01-23 07:11:59
【问题描述】:
echo (int)01; //1

echo (int)02; //2

echo (int)03; //3

echo (int)04; //4

echo (int)05; //5

echo (int)06; //6

echo (int)07; //7

echo (int)08; //0

echo (int)09; //0

echo (int)010; //8

echo (int)011; //9

echo (int)012; //10

echo (int)013; //11

(int) 从 01 到 07 做对了。但之后就出错了。这是什么原因??

【问题讨论】:

标签: php


【解决方案1】:

也许 08 应该是八进制数,就像 0x 是十六进制一样。

【讨论】:

  • “也许”?这是一个答案还是你在猜测?
  • 换句话说,改写。
【解决方案2】:

如果一个数字以 0 开头,则认为它是 octal number

因为这些数字的范围仅从 0 到 7。你得到一个 0,因为 8%8 = 0

参考:http://php.net/manual/en/language.types.integer.php

关于数字系统的附注

你有没有想过为什么 9 的下一个数字是 10?为什么在二进制系统中序列是 0, 1, 10, 11...?为什么八进制系统只允许从 0 到 7 的值?

这是因为数字系统通常在基数上基于模逻辑递增值。

以二进制数系统为例。因为是base 2,所以它只能包含值0、1,因为0%2 = 0、1%2 = 1,但是2%2又是0

所以每当出现更大的数字时,比如说 3。它的二进制值是(在前面的位置加一)(将模放在现有的位置)

所以二进制中3的值是(0+1) (3%2) = 11

虽然这不是确切的逻辑,只是把它放在这里供初学者参考

【讨论】:

    猜你喜欢
    • 2015-04-08
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    相关资源
    最近更新 更多