2011-06-04 69 views
2
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); 
} 

>> =這個表達式代表什麼?它對我來說看起來很奇怪。我在Google上找不到任何問題。php表達問題

回答

1

對於>>,這相當於+=

>>在二進制級別上按位移動。
如果一個整數/字節的值爲0000 1000執行>> 1它會使它的新值0000 0100,它會滑動位右插入到零的左側。
>> 2將使0000 0010

有效的結果將是相同的將其除以4作爲>> X == / 2^X

該代碼是相同的:

 
$check1 = $check1 >> $halfFactor 
2

>>手段「右移」及本聲明你已經指出 - 這意味着

$check1 = $check1 >>$halfFactor 
+0

>>所以這代表什麼? – matiasdelgado 2011-06-04 03:52:35

+0

什麼!爲什麼要投票! ? – Legolas 2011-06-04 03:56:12

1

這是右移賦值運算符。 見thisthis