我已经看到一些 PHP脚本在mt_rand(0, 0xffff)
. 我这样做echo 0xffff;
了,结果是65535。使用这个0xffff有什么意义吗?那是什么?
4 回答
十六进制表示法0xffff
清楚地表明数字中的所有位都是1
. 是相同的65535
数字,但二进制表示不那么明显。这只是一个计数。所以这种写数字的方式有不同的语义。
例如,如果要声明某个变量的最大值必须为 65535,那么最好这样声明:
$max_value = 65535;
因为这使人类很容易将其与其他值进行比较,例如 65500 ( < $max_value
) 或 66000 ( > $max_value
)。
位域则相反。
$default_state = 65535;
这并没有告诉我所有位都是一(实际上它们是)。
$default_state = 0xFFFF;
这样做:每个十六进制数字代表四个位,一个F
表示四个 1 位。因此0xFFFF
是0b1111111111111111
二进制的。
当程序员想要明确二进制表示的重要性时使用十六进制表示法,可能比精确的数值更重要。
如果您的代码正在执行二进制操作,那么与十进制相比,使用这样的十六进制值在上下文中更容易理解;尽管我不会将 mt_rand 视为其中一种情况(尤其是因为下限是十进制,而在您的示例中只有上限是十六进制)
这只是 65535 的十六进制表示法。在您提供的上下文中,两者之间没有重要区别,但比 65535 更容易记住“0、x 和四个 f 字符”。
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
希望能有所帮助