ID: 29874 User updated by: binhqx at mac dot com Reported By: binhqx at mac dot com Status: Open Bug Type: *Math Functions Operating System: OS X Server 10.3 (Darwin 7.5.0) PHP Version: Irrelevant New Comment:
I did some more searching through the bug archive and found many bugs pertaining to logic operator and doubles. Before I get redirected to one of those, I would like to emphasize that this is not a problem with the value being produced. The problem is the same operation is producing different results on different platforms. Previous Comments: ------------------------------------------------------------------------ [2004-08-28 06:35:30] binhqx at mac dot com Original description was cutoff: Bitwise right shift operator produces incorrect result when applied to a double in all version of PHP on OS X. During a bitwise right shift, the php processor casts the operand to a integer. Most of the time this works fine, but when the value of the operand is greater the 32 bits, the variable is chopped to just the last 32 bits. This is the way it should work. For example: 136586474 >> 10 becomes 133385 Under OS X Server, this casting procedure does not work the same way. When value of the operand is greater then 32 bits, the variable is changed to the largest posable value of a integer (2^32). Because all integers are signed this is -1. 8726521066 >> 10 becomes -1 I have tested the the shift operator on Linux using PHP 4.1.2 - 4.3.4 and it produces the correct results. On OS X/OS X Server (Darwin 7.5.0) using PHP 4.3.2 - 5.0.1 and it produces the incorrect results. It would appear the bug only exists in the OS X port of PHP. Examples: Testing OS X Server: http://worldvoicellc.net/ bitshift_test.php Testing Linux: http://12.160.216.20/altigen/phptest/ bitshift_test.php Testing code: http://worldvoicellc.net/bitshift_test.txt ------------------------------------------------------------------------ [2004-08-28 06:27:42] binhqx at mac dot com Description: ------------ Bitwise right shift operator produces incorrect result when applied to a double in all version of PHP on OS X. During a bitwise right shift, the php processor casts the operand Reproduce code: --------------- $operand = 8726521066; echo ($operand >> 10); Expected result: ---------------- 133385 Actual result: -------------- -1 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=29874&edit=1