Re: Strange Right-Shift Problem
| From: | Jochem Maas | Date: | Fri, 30 Dec 2005 13:08:20 +0000 |
| Subject: | Re: Strange Right-Shift Problem | ||
| References: | 1 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-228004@lists.php.net to get a copy of this message | ||
Michael Gross wrote:
Hello I have to migrate a PHP-application to a new Linux-Box. Both the old and the new system are Linux and PHP 5.1.1. (the old one has a Pentium 4, the new one two Xeon CPUs). I have a problem using the Crypt_Xtea-Extension. I narrowed it down to the following right-shiftlooking at the class I draw the conclusion that it reqires the use of [some] data in 'long' format (i.e. integers) and the code requires and assumes that such integers are 32bits long ... which they are on 32bit systems ... but not on 64bit systems . here in lies the problem, you need someone more knowledgable than I to give you an actual solution though.
operation: (-3281063054 >> 11) produces different results: Old System: 495070this is what you get with a 32bit CPU
New System: -1048576this is what you get with a 64bit CPU
I understand that both results are "wrong", but everything worked with the old behavior and I need that behavior back very urgent. Maybe someone can explain me in which way the bits are shifted so that the result is 495070? If I understand it, I implement my "own" shift$a << $b Shift left Shift the bits of $a $b steps to the left (each step means "multiply by two") $a >> $b Shift right Shift the bits of $a $b steps to the right (each step means "divide by two")
function. thanks a lot Michael Gross