perl – 使用“use integer”的XOR操作在Windows和Linux上给出不同的值

为什么我在 WindowsLinux上使用整数编译指示下的XOR表达式0 ^ 2506133561得到不同的结果?

视窗:

perl -e "use integer; print 0^2506133561"
-1788833735

Linux的:

perl -e 'use integer; print 0^2506133561'
2506133561

解决方法

Windows上的Perl解释器很可能使用32位整数,而您在Linux上使用的解释器则使用64位整数.

要测试它,请运行shell命令:

perl -V:ivsize

在每个系统上.它应该在32位perls上打印ivsize =’4′,在64位perls上打印ivsize =’8′.您还可以使用Config模块中的$Config {ivsize}在Perl脚本中获取此信息.

要强制将位操作的结果解释为带符号的32位数,即使在64位perls上,也可以使用pack

$num = unpack "l",pack "l",$num;

或者,您可以使用简单的位操作和算法,如mpapec建议:

$num &= 0xFFFFFFFF;
$num -= 2**32 if $num >= 2**31;

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...