2009-11-15 44 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