PHP右移和否定结果?

时间:2009-11-15 12:42:56

标签: php bit-shift

我在将一些C代码转换为PHP时遇到了问题,特别是在使用右移运算符时。

编辑:在以下示例中,bit = 0;

原始C代码:

p->param->outBits[bytePtr++] |= codeword >> (9 + bit);

PHP代码:

$outBits[$bytePtr++] |= $codeword >> (9 + $bit);

如果我从codeword开始是130728,那么在C中我得到预期的结果-1。在PHP中我得到255.我理解这与算术/逻辑移位差异有关,并且由于MSB保持为零而没有引入负号。

在PHP中是否存在一种“快速”方式,不涉及转移?例如,通过基本的算术或类似的,这将给我预期的答案?

1 个答案:

答案 0 :(得分:3)

你的问题是PHP没有类型byte,它只有integer,通常是32位(不是8),所以如果你真的需要负值那里(位是无论如何,因为无符号255与有符号-1)相同,那么你应该添加缺失的24个或者使用算术来恢复负值(255是-1,254是-2等等,即256-x = -x)。