为什么Perl的bignum模块给出了功率计算的奇怪结果?

bug*_*net 2 perl activestate

上下文:ActiveState Perl:这是为MSWin32-x86-multi-thread构建的perl 5,版本12,subversion 4(v5.12.4)

>perl -Mbignum=l -e "print 2 ** 32"
4294967296

>perl -Mbignum=l -e "print -2 ** 32"
-4294967296
Run Code Online (Sandbox Code Playgroud)

然后我开始思考,也许我需要划分负面的两个.

>perl -Mbignum=l -e "print (-2) ** 32"
-2
Run Code Online (Sandbox Code Playgroud)

终于想通了.

>perl -Mbignum=l -e "print ((-2) ** 32)"
4294967296
Run Code Online (Sandbox Code Playgroud)

所有括号怎么样?

Dav*_*ber 9

这个主题涵盖了你的两个问题(你必须稍微找一下相应的部分print (-2) ** 32).

总结一下:

  • 对于你的第一个问题(perl -Mbignum=l -e "print -2 ** 32"):在Perl中,指数的优先级高于一元否定.
  • 对于第二个问题(perl -Mbignum=l -e "print (-2) ** 32"):密钥是打印文档中的以下警告.

    另外注意不要使用左括号跟随print关键字,除非你想要相应的右括号来终止print的参数 - 插入一个+或在所有参数周围加上括号.