BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / www-technology / #10253同步于 2010/7/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖

[合集] [请教]一个php的简单问题

xw2423
2010/7/5镜像同步0 回复
☆─────────────────────────────────────☆ bupthgl (swordheart) 于 (Thu Nov 5 18:11:51 2009) 提到: 对一个整数移位,居然越界。。 <?php //$a = sprintf("%u", 4278190080); //如果是这句话,则输出127 $a = 4278190080; //如果是这句话,则输出-1 $c = $a >> 24; echo $c."<br>"; ?> (结果应该是255) 可是这个还不到unsigned的2^32-1啊,怎么办? ☆─────────────────────────────────────☆ yegle ( ) 于 (Thu Nov 5 18:15:33 2009) 提到: works fine here: php -r '$a=4278190080; $c= $a >>24; echo $c."<br />";' 【 在 bupthgl (swordheart) 的大作中提到: 】 : 对一个整数移位,居然越界。。 : <?php : //$a = sprintf("%u", 4278190080); //如果是这句话,则输出127 : ................... ☆─────────────────────────────────────☆ bupthgl (swordheart) 于 (Thu Nov 5 18:43:24 2009) 提到: 我用cli运行的结果还是-1...这和什么配置有关? 【 在 yegle 的大作中提到: 】 : works fine here: : php -r '$a=4278190080; $c= $a >>24; echo $c."<br />";' ☆─────────────────────────────────────☆ yegle ( ) 于 (Thu Nov 5 18:49:27 2009) 提到: PHP版本? 【 在 bupthgl (swordheart) 的大作中提到: 】 : 我用cli运行的结果还是-1...这和什么配置有关? ☆─────────────────────────────────────☆ bupthgl (swordheart) 于 (Thu Nov 5 18:54:14 2009) 提到: PHP 5.2.6-2ubuntu4.3 【 在 yegle 的大作中提到: 】 : PHP版本? ☆─────────────────────────────────────☆ yegle ( ) 于 (Thu Nov 5 18:56:20 2009) 提到: php -r "echo PHP_INT_MAX;"结果是多少? 【 在 bupthgl (swordheart) 的大作中提到: 】 : PHP 5.2.6-2ubuntu4.3 ☆─────────────────────────────────────☆ bupthgl (swordheart) 于 (Thu Nov 5 18:57:37 2009) 提到: 2147483647....... 【 在 yegle 的大作中提到: 】 : php -r "echo PHP_INT_MAX;"结果是多少? ☆─────────────────────────────────────☆ bupthgl (swordheart) 于 (Thu Nov 5 19:06:31 2009) 提到: 32位机不都应该是这个数?可是无符号怎么也不对呢?要是等它转化成float了,就没法移位了。。。 【 在 yegle 的大作中提到: 】 : php -r "echo PHP_INT_MAX;"结果是多少? ☆─────────────────────────────────────☆ xw2423 (静水之人) 于 (Thu Nov 5 20:16:02 2009) 提到: php不支持无符号整数 , $a已经是float了,你可以var_dump看看 【 在 bupthgl (swordheart) 的大作中提到: 】 : 对一个整数移位,居然越界。。 : <?php : //$a = sprintf("%u", 4278190080); //如果是这句话,则输出127 : ................... ☆─────────────────────────────────────☆ bupthgl (swordheart) 于 (Thu Nov 5 20:27:04 2009) 提到: 那有没有策略可以让这个数的移位运算正确进行呢?还是必须更换语言或者更换之前的结构 【 在 xw2423 的大作中提到: 】 : php不支持无符号整数 , $a已经是float了,你可以var_dump看看 ☆─────────────────────────────────────☆ xw2423 (静水之人) 于 (Thu Nov 5 20:45:06 2009) 提到: 倒是没有什么直接方法,大数用gmp库把。。 【 在 bupthgl (swordheart) 的大作中提到: 】 : 那有没有策略可以让这个数的移位运算正确进行呢?还是必须更换语言或者更换之前的结构 ☆─────────────────────────────────────☆ Thinker (思想者) 于 (Thu Nov 5 22:11:06 2009) 提到: 【 在 bupthgl 的大作中提到: 】 : 对一个整数移位,居然越界。。 : <?php : //$a = sprintf("%u", 4278190080); //如果是这句话,则输出127 : ................... 貌似是这样的: float(4278190080)在进行移位的时候会被强制转换成了int(-16777216) 这个是因为 float(4278190080)= bin( 11111111 00000000 00000000 00000000 ) ------------------------A bin( 11111111 11111111 11111111 11111111 )-------------------------B bin( 00000000 00000000 00000000 11111111 )-------------------------C A式正是原来的数字的2进制表示; B式正是按照有符号右移24位之后的结果,显然刚好是-1,而且发现是int型的变量; C式正是按照无符号右移24位之后的结果,显然是255,即你想要得到的结果; 好就变成了int(-1) 在我这里运行结果也是-1,with php-5.3.0 有一个>>>,称作无符号右移,不知道怎么用的[em22] ☆─────────────────────────────────────☆ yegle ( ) 于 (Thu Nov 5 22:15:31 2009) 提到: 强制intval($a)? 【 在 xw2423 (静水之人) 的大作中提到: 】 : 倒是没有什么直接方法,大数用gmp库把。。 ☆─────────────────────────────────────☆ xw2423 (静水之人) 于 (Thu Nov 5 22:39:09 2009) 提到: 最好的解决办法就是换64位机器。。。 【 在 yegle ( ) 的大作中提到: 】 : 强制intval($a)? ☆─────────────────────────────────────☆ yegle ( ) 于 (Thu Nov 5 23:17:59 2009) 提到: 囧… 【 在 xw2423 (静水之人) 的大作中提到: 】 : 最好的解决办法就是换64位机器。。。 ☆─────────────────────────────────────☆ bupthgl (swordheart) 于 (Fri Nov 6 00:09:51 2009) 提到: php可以运算符重载? 【 在 Thinker 的大作中提到: 】 : [B] : 貌似是这样的: : float(4278190080)在进行移位的时候会被强制转换成了int(-16777216) : ................... ☆─────────────────────────────────────☆ coolfantasy (Cool) 于 (Fri Nov 6 11:06:16 2009) 提到: 换 64 位机 ☆─────────────────────────────────────☆ coolfantasy (Cool) 于 (Fri Nov 6 11:09:18 2009) 提到: 靠谱 http://cn.php.net/manual/en/book.gmp.php 【 在 xw2423 (静水之人) 的大作中提到: 】 : 倒是没有什么直接方法,大数用gmp库把。。 ☆─────────────────────────────────────☆ bupthgl (swordheart) 于 (Fri Nov 6 19:00:13 2009) 提到: 恩,是可以,但gmp没有移位运算。。。如果用pow和divide的话性能就不是那么高了。。。 【 在 coolfantasy 的大作中提到: 】 : 靠谱 : http://cn.php.net/manual/en/book.gmp.php
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。