php表达问题

时间:2011-06-04 03:48:11

标签: php

function createHash($string) {
    $check1 = $this->stringToNumber($string, 0x1505, 0x21);
    $check2 = $this->stringToNumber($string, 0, 0x1003F);

    $factor = 4;
    $halfFactor = $factor/2;

    $check1 >>= $halfFactor;
    $check1 = (($check1 >> $factor) & 0x3FFFFC0 ) | ($check1 & 0x3F);
    $check1 = (($check1 >> $factor) & 0x3FFC00 ) | ($check1 & 0x3FF);
    $check1 = (($check1 >> $factor) & 0x3C000 ) | ($check1 & 0x3FFF);  

    $calc1 = (((($check1 & 0x3C0) << $factor) | 
                ($check1 & 0x3C)) << $halfFactor ) | 
                ($check2 & 0xF0F );
    $calc2 = (((($check1 & 0xFFFFC000) << $factor) |
                ($check1 & 0x3C00)) << 0xA) | 
                ($check2 & 0xF0F0000 );

    return ($calc1 | $calc2);
}

&gt;&gt; = 此表达式代表什么?它看起来很奇怪。我在谷歌上找不到任何问题。

4 个答案:

答案 0 :(得分:2)

>>表示'右移'和你指出的陈述 - 它意味着

$check1 = $check1 >>$halfFactor

答案 1 :(得分:1)

是右移赋值算子。 请参阅thisthis

答案 2 :(得分:1)

相当于+=的{​​{1}}。

>>是二进制级别的按位移位 如果一个整数/字节的值>>在其上执行0000 1000会使它成为新值>> 1,它会向右滑动位向右插入零。
0000 0100会使>> 2等。

有效结果与0000 0010 == >> X

除以4相同

该代码与:

相同
$check1 = $check1 >> $halfFactor

答案 3 :(得分:0)

请参阅documentation (bitwise operators)

此代码:

$check1 >>= $halfFactor;

实际上意味着类似的内容:将$check1除以2 ^ $halfFactor次,并将结果分配给$check1