How can I do 64-bit arithmetic in Perl?

2019-02-06 15:33发布

I am a perl newbie,

Can I simply use 64-bit arithmetic in Perl?

For example

$operand1 = 0xFFFFFFFFFFFF;   # 48 bit value
$operand2 = 0xFFFFFFFFFFFF;   # 48 bit value

$Result = $operand1 * $operand2;
  • I am basically looking for a replacement for the int64_t in perl.
  • Is there any way to mention, if the variable is signed or unsigned?

5条回答
叼着烟拽天下
2楼-- · 2019-02-06 15:50

Yes, however you need to have Perl compiled with 64-bit support.

查看更多
ゆ 、 Hurt°
3楼-- · 2019-02-06 16:01

use bigint will make Perl handle arbitrary size integers correctly without integer overflow.

Eg.:

use bigint;
print 1 << 256;

will print:

115792089237316195423570985008687907853269984665640564039457584007913129639936
查看更多
虎瘦雄心在
4楼-- · 2019-02-06 16:05

Yes, Perl automatically handles large integer arithmetic for you. However, Perl does not offer a distinction between signed and unsigned types (there's no need, since there are not fixed bounds on large integer range).

The perlnumber manual page has more information about the different numeric formats supported by Perl.

查看更多
欢心
5楼-- · 2019-02-06 16:10

Be aware, 64bit arithmetic in Perl is one, but what it is displayed by sprintf %d %u and %s, is second. Current perl version supports 64bits without problems, but sprintf %d format not, %b likewise .

查看更多
家丑人穷心不美
6楼-- · 2019-02-06 16:15

See bigint:

Transparent BigInteger support for Perl...

All operators (including basic math operations) except the range operator .. are overloaded. Integer constants are created as proper BigInts.

Floating point constants are truncated to integer. All parts and results of expressions are also truncated.

Unlike integer, this pragma creates integer constants that are only limited in their size by the available memory and CPU time...

查看更多
登录 后发表回答