今天,我在php中测试了一个有趣的发现,比如INF ^ 0
(^
=>异或位运算符),它在64位系统中给了我int(-9223372036854775808)
=>最大可能的负值。
但随后我问自己:“当”正无穷“表示9223372036854775807
( 1
上63位,前导0
)和0( 0
=> 0 xor 0 = 0
上64位)时,为什么异或中的结果为负值?positive的值是什么?它背后的计算是什么?当我使用”负infinit“(0 => 1 xor 0 = 1
上的前导1
对前导0
?)时,为什么我会得到(正确的?)负值?”
另一个有趣的是,这只发生在PHP版本5.5.9-1上,而不是在5.3.x上。和5.6.x (我已经测试过了)!也许有人知道那里发生了什么?在三个版本上进行了测试,但仅在我的(5.5.9-1)上给出了这些结果:
只是想让你们知道,这只是一个抽象的游戏,我只是为了好玩,但我发现它很有趣。也许有人可以帮我,或者给我解释一下我的错误想法?如果有人需要更多的信息,请告诉我!
编辑:相应地,如果能得到一个完整的答案,那就太好了,所以我引用他的话:why does 5.5 and 5.6 result in PHP_INT_MIN, and everything else return 0?
发布于 2016-02-03 18:27:24
您的float(INF)
被隐式强制转换为一个整数。
与0进行XOR运算不会改变第一个参数。所以基本上这只是一个从浮点数到整数的转换,对于不在整数范围内的值是未定义的。(对于所有其他值,它将被截断为接近零)
https://stackoverflow.com/questions/34904642
复制相似问题