Php perl一元~未给出预期结果
我正在尝试将一个php算法移植到perl,但我很难使用我不熟悉的一位运算符 因此php代码如下所示:Php perl一元~未给出预期结果,php,perl,bit,unary-operator,Php,Perl,Bit,Unary Operator,我正在尝试将一个php算法移植到perl,但我很难使用我不熟悉的一位运算符 因此php代码如下所示: ... $var = '348492634'; print ~$var; ... 结果:-348492635 在perl中执行完全相同的操作: ... $var = '348492634'; print ~$var; ... 结果:18446744073361058981 我读了很多关于整数大小的书,这取决于cpu的体系结构,但我从未找到一个可行的解决方案。也许我只是在perl中使用了错误的
...
$var = '348492634';
print ~$var;
...
结果:-348492635
在perl中执行完全相同的操作:
...
$var = '348492634';
print ~$var;
...
结果:18446744073361058981
我读了很多关于整数大小的书,这取决于cpu的体系结构,但我从未找到一个可行的解决方案。也许我只是在perl中使用了错误的函数
逻辑必须得到与php脚本相同的结果
提前感谢在您的设置中,PHP int是32位有符号的,而perl int是64位无符号的 这可能会满足您在给定系统上的需要,但如果您在另一个perl安装上使用它,则不能保证它的工作方式相同
$var = '348492634'; #hex!
print ~($var - 2**32) - 2**32;
快速脏转换是:
print -($var+1); # like ~$var in PHP
如果perl使用的是64位整数,那么这只会在$var=-18446744073709551616
(
0x80000000000000
),这是一个无论如何都不会在32位PHP中使用的值。以下内容适用于$var='348492634'
(您声称拥有)和$var=348492634
(您拥有的):
一元
~
强制输入一个整数,而不是您的代码注释所建议的十六进制字符串。@mob~
也适用于字符串:“\xCE\xCD\xCC”eq~“123”
。EggL的输出不是由他显示的代码生成的,还有另一个numification。@amon它可能取决于PHP版本。查看上的注释并看到每个人都试图重新实现~
操作符,这很有趣。@mob对不起,我刚才说的是Perl代码片段,并且误认为您的注释也在谈论Perl。当然,Php的~
仅限于int32。(哦,天哪,虽然我今天早些时候写了类似的代码,但是字符串化中的代码很伤脑筋)。
unpack('l', ~pack('l', $var))