4

我正在尝试将一个 php 算法移植到 perl,但我与我不熟悉的一位运算符斗争...

所以php代码看起来像这样:

...
$var = '348492634';
print ~$var;
...

结果:-348492635

在 perl 中做同样的事情:

...
$var = '348492634';
print ~$var;
...

结果:18446744073361058981

我根据 cpu 的体系结构阅读了很多关于整数大小的信息,但我从未找到一个可行的解决方案。也许我只是在 perl 中使用了错误的函数......

逻辑必须获得与 php 脚本中相同的结果。

提前致谢

4

3 回答 3

2

似乎在您的设置中,PHP 整数是 32 位有符号的,而 perl 整数是 64 位无符号的。

这可能会在给定系统上满足您的需求,但如果您在其他 perl 安装中使用它,则不能保证其工作方式相同。

$var = '348492634'; #hex!
print ~($var - 2**32) - 2**32;
于 2013-10-31T21:58:01.187 回答
1

以下将适用于$var='348492634'(您声称拥有)和$var=348492634(您确实拥有):

unpack('l', ~pack('l', $var))
于 2013-11-01T01:34:20.530 回答
0

快速而肮脏的转换是:

print -($var+1);    # like ~$var in PHP

如果您的 perl 使用 64 位整数,那么这只会在$var=-18446744073709551616 ( 0x8000000000000000) 中失败,这是您无论如何都不会在 32 位 PHP 中使用的值。

于 2013-10-31T22:14:14.480 回答