PHP代码转移?

时间:2010-12-21 15:26:34

标签: 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等是怎么回事。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

他们正在使用Bitwise Operators来检查特定位是否已打开。

在您提供的示例中,他们确认前5位是1,然后将所有位移到左侧8位。 (虽然看起来在这种情况下它们从0(00000000)开始,检查0x1F是否打开(00011111)仍然是0,然后将它们向左移动8位(放入2 ^ 8位置)

作为参考,我会查看php's manual on bitwise operators。他们列举了一些正在发生的事情的例子。如果你真的好奇,只需在操作变量时回显变量(或将它分解为单独的操作),然后检查它们。)