19

我已经看到一些 PHP脚本mt_rand(0, 0xffff). 我这样做echo 0xffff;了,结果是65535。使用这个0xffff有什么意义吗?那是什么?

4

4 回答 4

44

十六进制表示法0xffff清楚地表明数字中的所有位都是1. 是相同的65535数字,但二进制表示不那么明显。这只是一个计数。所以这种写数字的方式有不同的语义。

例如,如果要声明某个变量的最大值必须为 65535,那么最好这样声明:

$max_value = 65535;

因为这使人类很容易将其与其他值进行比较,例如 65500 ( < $max_value) 或 66000 ( > $max_value)。

位域则相反。

$default_state = 65535;

这并没有告诉我所有位都是一(实际上它们是)。

$default_state = 0xFFFF;

这样做:每个十六进制数字代表四个位,一个F表示四个 1 位。因此0xFFFF0b1111111111111111二进制的。

当程序员想要明确二进制表示的重要性时使用十六进制表示法,可能比精确的数值更重要。

于 2012-10-30T10:38:58.677 回答
7

如果您的代码正在执行二进制操作,那么与十进制相比,使用这样的十六进制值在上下文中更容易理解;尽管我不会将 mt_rand 视为其中一种情况(尤其是因为下限是十进制,而在您的示例中只有上限是十六进制)

于 2012-10-30T10:35:46.837 回答
6

这只是 65535 的十六进制表示法。在您提供的上下文中,两者之间没有重要区别,但比 65535 更容易记住“0、x 和四个 f 字符”。

于 2012-10-30T10:35:15.940 回答
5

0xffff是一个十六进制数。0x只告诉你 0x 后面的值十六进制的。十六进制有16 位数字,从0 到 9和从a 到 f(这意味着,a = 10, b = 11, c = 12, d = 13, e = 14, f = 15在十六进制数中)。

要计算十六进制数的十进制值,您必须将数字的值乘以 16 乘以数字中位数的幂。

例子:

ffff = (15*16^3) + (15*16^2) + (15*16^1) + (15*16^0) = 65535

在上述情况下,f值为 15,它位于数字的 0、1、2 和 3 位。然后在下面的示例中,十六进制 3、4 和 6 的行为与十进制等效,a其值为 10。

34a6 = (3*16^3) + (4*16^2) + (10*16^1) + (6*16^0) = 13478

希望能有所帮助

于 2019-08-21T09:37:23.713 回答