返回信息流☆─────────────────────────────────────☆
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
这是一条镜像帖。来源:北邮人论坛 / www-technology / #10253同步于 2010/7/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖
[合集] [请教]一个php的简单问题
xw2423
2010/7/5镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。