- 本文地址: https://www.laruence.com/2011/10/10/2232.html
- 转载请注明出处
从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
I often visit your blog and have noticed that you don’t update
it often. More frequent updates will give your website higher rank & authority in google.
I know that writing content takes a lot of time, but you
can always help yourself with miftolo’s tools which will shorten the
time of creating an article to a few seconds.
[…] 想看大鸟:二进制直接量(binary number format) […]
java7里的新特性
@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
2^64 是浮点数?
那你用18446744073709551616这个数..
if (18446744073709551616 == 18446744073709551615){
echo ‘x’;
}
试试.. 你就知道我说的啥意思了- -..
@wclssdn 这不是整数,这是浮点数啊
@vt 你尝试用2^64这个数试试… 前提是32位机器上.
我不想计算小数… 我是想说.. PHP在大整数的处理上..有点问题..
再试一次
function compare_float($f1, $f2, $precision=0.00001) {
if (abs($f1-$f2) < $precision) {
return 1; // equal
}
else {
return 0; // not equal
}
}
@wclssdn PHP 有浮点类型的,你说的这个问题和 PHP 没关系。如果你想比较浮点数可以用这种办法:
function compare_float($f1, $f2) {
$precision = 0.00001;
if ((($f1 – $precision) f2))
return 1;
else
return 0;
}
内个… PHP中有double类型么?
pow(2,64) == pow(2,64) – 1 的问题. 很恶心啊..
话说. 这是32位机器上的效果..