Как я могу выполнить 64-битную арифметику в Perl?

StackOverflow https://stackoverflow.com/questions/1864245

  •  16-09-2019
  •  | 
  •  

Вопрос

Я новичок в perl,

Могу ли я просто использовать 64-битную арифметику в Perl?

Например

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

$Result = $operand1 * $operand2;
  • Я в основном ищу замену int64_t в perl.
  • Есть ли какой-нибудь способ указать, является ли переменная знаковой или беззнаковой?
Это было полезно?

Решение

Да, однако вам необходимо скомпилировать Perl с поддержкой 64-разрядной версии.

Другие советы

Видишь большой член:

Прозрачная поддержка BigInteger для Perl...

Все операторы (включая базовые математические операции), за исключением оператора range .. перегружены.Целочисленные константы создаются как правильные BigInts.

Константы с плавающей запятой усекаются до целого числа.Все части и результаты выражений также усекаются.

В отличие от целое число, эта прагма создает целочисленные константы, размер которых ограничен только доступной памятью и процессорным временем...

Да, Perl автоматически обрабатывает арифметику больших целых чисел за вас.Однако Perl не предлагает различия между типами со знаком и без знака (в этом нет необходимости, поскольку не существует фиксированных границ для большого диапазона целых чисел).

В перлномер страница руководства содержит дополнительную информацию о различных числовых форматах, поддерживаемых Perl.

Имейте в виду, 64-битная арифметика в Perl - это одно, но то, как она отображается sprintf %d %u и %s, - это второе.Текущая версия perl поддерживает 64 бита без проблем, но формат sprintf %d отсутствует, %b аналогично .

use bigint это позволит Perl корректно обрабатывать целые числа произвольного размера без переполнения целых чисел.

Например.:

use bigint;
print 1 << 256;

будет печатать:

115792089237316195423570985008687907853269984665640564039457584007913129639936
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top