我正在尝试将php算法移植到perl但是我对一个我不熟悉的操作符很困难......
所以php代码看起来像这样:
...
$var = '348492634';
print ~$var;
...
结果:-348492635
在perl中执行完全相同的操作:
...
$var = '348492634';
print ~$var;
...
结果:18446744073361058981
我根据cpu的体系结构阅读了很多关于整数大小的内容,但我从未找到过有效的解决方案。也许我只是在perl中使用了错误的函数......
逻辑必须得到与php脚本相同的结果。
提前致谢
答案 0 :(得分:2)
似乎在您的设置中,PHP整数是32位签名而perl整数是64位无符号。
这可能会在给定系统上执行您所需的操作,但如果您在另一个perl安装中使用它,则无法保证其工作原理。
$var = '348492634'; #hex!
print ~($var - 2**32) - 2**32;
答案 1 :(得分:1)
以下内容适用于$var='348492634'
(您声称拥有)和$var=348492634
(您确实拥有):
unpack('l', ~pack('l', $var))
答案 2 :(得分:0)
快速而肮脏的转换是:
print -($var+1); # like ~$var in PHP
如果你的perl使用的是64位整数,那么$var=-18446744073709551616
只会失败
(0x8000000000000000
),这是一个你不会在32位PHP中使用的值。