Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php perl一元~未给出预期结果_Php_Perl_Bit_Unary Operator - Fatal编程技术网

Php perl一元~未给出预期结果

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中使用了错误的

我正在尝试将一个php算法移植到perl,但我很难使用我不熟悉的一位运算符

因此php代码如下所示:

...
$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))