Perl 一元 ~ 给出的结果不是预期的结果


perl unary ~ gives not the expected result

我正在尝试将 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=-184467440737095516160x8000000000000000 ),这是一个你无论如何都不会在 32 位 PHP 中使用的值。