2

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

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

原始C代码:

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

PHP代码:

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

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

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

4

1 回答 1

3

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

于 2009-11-15T12:57:29.657 回答