从PHP5.4开始, 我们可以直接在代码中书写二进制直接量了. 这个在定义一些标志位的时候, 尤为方便.
看下面的例子:
$bin = 0b1101; echo $bin; //13
而在以前, 我们需要使用bin2dec来用字符串表示, 这个着实有些不爽.
另外, PHP5.4还新增了hex2bin 可以直接把一个十六进制表示的字符串, 转换成二进制数据流, 而在以前, 我们需要使用pack来完成.
<?php $hex = "ff0f"; var_dump(hex2bin($hex) === pack("H*", $hex)); //bool(true);
不过, 还是要提醒下: PHP 5.4还处于开发阶段, 在最终release之前, 任何新特性都可能被调整或者更改. 如果大家有任何建议, 也欢迎反馈, 帮助我们使得PHP变得更好.
谢谢
更多更新信息, 请关注: Changelog
Comments
- 2011/10/10, wclssdn writes: 内个… PHP中有double类型么?
pow(2,64) == pow(2,64) – 1 的问题. 很恶心啊..
话说. 这是32位机器上的效果.. - 2011/10/10, vt writes: @wclssdn PHP 有浮点类型的,你说的这个问题和 PHP 没关系。如果你想比较浮点数可以用这种办法:function compare_float($f1, $f2) {
$precision = 0.00001;
if ((($f1 – $precision) f2))
return 1;
else
return 0;
} - 2011/10/10, vt writes: 再试一次function compare_float($f1, $f2, $precision=0.00001) {
if (abs($f1-$f2) < $precision) {
return 1; // equal
}
else {
return 0; // not equal
}
} - 2011/10/10, wclssdn writes: @vt 你尝试用2^64这个数试试… 前提是32位机器上.
我不想计算小数… 我是想说.. PHP在大整数的处理上..有点问题.. - 2011/10/10, vt writes: @wclssdn 这不是整数,这是浮点数啊
- 2011/10/10, wclssdn writes: 2^64 是浮点数?
那你用18446744073709551616这个数..
if (18446744073709551616 == 18446744073709551615){
echo ‘x’;
}
试试.. 你就知道我说的啥意思了- -.. - 2011/10/10, wynn writes: @wclssdn: 请认真看一下PHP文档,在type的integer那一部分有很明确的描述:整数溢出
如果给定的一个数超出了 integer 的范围,将会被解释为 float。同样如果执行的运算结果超出了 integer 范围,也会返回 float。以及对应的范例代码:
<?php
$large_number = 2147483647;
var_dump($large_number);
// 输出为:int(2147483647)$large_number = 2147483648;
var_dump($large_number);
// 输出为:float(2147483648)你可以自己试试看 var_dump(pow(2,64), pow(2, 64)-1); 看看结果是什么(尤其请注意看类型)。
32位机器上,float拥有14位精度,而pow(2,64)是10^19量级了。
要对大整数进行处理可以用GMP或者BCMath - 2011/12/10, iminto writes: java7里的新特性
Copyright © 2010 风雪之隅 版权所有, 转载务必注明. 该Feed只供个人使用, 禁止未注明的转载或商业应用. 非法应用的, 一切法律后果自负. 如有问题, 可发E-mail至my at laruence.com.(Digital Fingerprint: 73540ba0a1738d7d07d4b6038d5615e2)
Related Posts:
转载请注明:爱开源 » 二进制直接量(binary number format)