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