2010-12-21 67 views
3

有人可以幫我理解這個古代的代碼嗎?PHP在代碼中移位?

$a = 00040000000002; 
$n = sscanf($a,"%02x%02x%02x%02x%02x%02x%02x",$r[7],$r[6],$r[5],$r[4],$r[3],$r[2],$r[1]); 

$ptemp = $r[1] + (($r[2] & 0x1F) << 8); 
$l[$i] = (($r[2] & 0xE0) >> 5) + ($r[3] << 3); 
$m[$i] = $r[4] + (($r[5] & 0x03) << 8); 
$h[$i] = (($r[5] & 0xFC) >> 2) + (($r[6] & 0x03) << 6); 
$dist[$i] = (($r[6] & 0xFC) >> 2) + (($r[7] & 0x0F) << 6); 
$fruittoday[$i] = ($r[7] & 0xF0) >> 4; 

我明白sscanf,但我不知道是怎麼回事與& 0x1f << 8

任何想法?

回答

3

他們正在使用Bitwise Operators來檢查特定位是否打開。

在你提供的例子中,他們確認前5位是1,然後將所有位移到左邊的8個位置。 (儘管看起來像在這種情況下,它們以0(00000000)開始,檢查0x1F是否打開(00011111)仍然是0,然後將它們移到左邊8個位置(放入第2個第8個位置)

作爲參考,我會檢查出php's manual on bitwise operators,他們列舉了一些發生了什麼的例子,如果你真的好奇,只需在變量被操縱時回顯變量(或者將它分解爲單獨的操作),然後檢查它們)。