2009-11-15 26 views
2

我遇到了一个问题,同时将一些C代码转换为PHP,特别是使用右移运算符。PHP右移和负面结果?

编辑:在下面的例子中,位= 0;

原始的C代码:

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

PHP代码:

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

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

有没有一种“快速”的方式在PHP中做到上述不涉及转移?例如通过基本算术或类似算法,这会给我预期的答案?

+0

@stereofrog,刚刚意识到'outBits'内存是一个char的负载,因此8位,因此在结果上的差异 - 感谢指向我写一个快速测试案例! :-) – richsage 2009-11-15 13:30:26

回答

3

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

+0

这就是我所缺少的 - 看到我的评论上面到@stereofrog。干杯! :-) – richsage 2009-11-15 13:31:19