msgbartop
PHP语言, PHP扩展, Zend引擎相关的研究,技术,新闻分享 – 左手代码 右手诗
msgbarbottom

10 Oct 11 二进制直接量(binary number format)

从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


分享到:



Related Posts:

Tags: , , ,

9 Responses to “二进制直接量(binary number format)”

  1. PHP5.4的变化关注—What has changed in PHP 5.4.x – 运维部落 |

    [...]        想看大鸟:二进制直接量(binary number format)  [...]

  2. iminto |

    java7里的新特性

  3. wynn |

    @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

  4. wclssdn |

    2^64 是浮点数?
    那你用18446744073709551616这个数..
    if (18446744073709551616 == 18446744073709551615){
    echo ‘x’;
    }
    试试.. 你就知道我说的啥意思了- -..

  5. vt |

    @wclssdn 这不是整数,这是浮点数啊

  6. wclssdn |

    @vt 你尝试用2^64这个数试试… 前提是32位机器上.
    我不想计算小数… 我是想说.. PHP在大整数的处理上..有点问题..

  7. vt |

    再试一次

    function compare_float($f1, $f2, $precision=0.00001) {
    if (abs($f1-$f2) < $precision) {
    return 1; // equal
    }
    else {
    return 0; // not equal
    }
    }

  8. vt |

    @wclssdn PHP 有浮点类型的,你说的这个问题和 PHP 没关系。如果你想比较浮点数可以用这种办法:

    function compare_float($f1, $f2) {
    $precision = 0.00001;
    if ((($f1 – $precision) f2))
    return 1;
    else
    return 0;
    }

  9. wclssdn |

    内个… PHP中有double类型么?
    pow(2,64) == pow(2,64) – 1 的问题. 很恶心啊..
    话说. 这是32位机器上的效果..

Leave a Reply

*