#35497 [Bgs]: Difference between echo and printf

From: Date: Thu, 01 Dec 2005 00:12:17 +0000
Subject: #35497 [Bgs]: Difference between echo and printf
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-89543@lists.php.net to get a copy of this message
ID: 35497 Updated by: tony2001@php.net Reported By: viperjason at gmail dot com Status: Bogus Bug Type: Scripting Engine problem Operating System: Windows XP SP2 PHP Version: 5CVS-2005-11-30 (CVS) New Comment: /usr/include/limits.h: #define LONG_MAX 2147483647L # php -r 'var_dump("0x".dechex(2147483647));' string(10) "0x7fffffff" # php -r 'var_dump(0x8000000F);' float(2147483663) Previous Comments: ------------------------------------------------------------------------ [2005-12-01 00:54:13] viperjason at gmail dot com I thought ints were 32bits? 0x8000000F is a 32 bit value. ------------------------------------------------------------------------ [2005-11-30 23:11:00] tony2001@php.net >$a = 0x8000000F; In this case $a is bigger than int, so the engine converts it to float automatically. printf("%d") casts it back to int and you get negative value as the result. echo (int)$a; will give you the same. In all the other cases echo & printf() give the very same results. No bug here. ------------------------------------------------------------------------ [2005-11-30 22:51:59] viperjason at gmail dot com Description: ------------ If you look at the code I initialize a 32bit hex value and print it with both printf and echo. I do a AND and a OR to get the value back to the original value and print it again with printf and echo. Printf and echo disaggree on the first print Printf and echo agree on the second print Printf and echo agree on the third print. What happened with the first print? I realize you use signed integers.....but where is my sign? Reproduce code: --------------- <? $a = 0x8000000F; printf("hex=%x, dec=%d by printf\n",$a,$a); echo $a."by echo\n"; $a = $a & 0x0FFFFFFF; printf("hex=%x, dec=%d by printf\n",$a,$a); echo $a."\n"; $a = $a | 0x80000000; printf("hex=%x, dec=%d by printf\n",$a,$a); echo $a."\n"; ?> Expected result: ---------------- I expect both printf and echo to consistantly print out the same decimal result. Actual result: -------------- The first time they didnt and second time they did. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=35497&edit=1

« previous php.bugs (#89543) next »