2010-12-21 27 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,他们列举了一些发生了什么的例子,如果你真的好奇,只需在变量被操纵时回显变量(或者将它分解为单独的操作),然后检查它们)。