Perl Unary ~ дает не ожидаемый результат

Я пытаюсь перенести алгоритм php на perl, но я борюсь с одним битовым оператором, с которым я не знаком...

поэтому код PHP выглядит так:

...
$var = '348492634';
print ~$var;
...

результат: -348492635

делает то же самое в Perl:

...
$var = '348492634';
print ~$var;
...

Результат: 18446744073361058981

Я много читал о целочисленном размере в зависимости от архитектуры процессора, но я так и не нашел работающего решения. Может быть, я просто использую неправильную функцию в Perl...

Для логики необходимо получить тот же результат, что и в сценарии php.

заранее спасибо

3 ответа

Похоже, что в вашей настройке, PHP-32-битные подписаны, а Perl-64-битные без знака.

Это, вероятно, будет делать то, что вам нужно в данной системе, но не гарантируется, что оно будет работать так же, если вы используете его в другой установке perl.

$var = '348492634'; #hex!
print ~($var - 2**32) - 2**32;

Следующее будет делать для обоих $var='348492634' (что вы утверждаете, что есть) и $var=348492634 (что у вас было):

unpack('l', ~pack('l', $var))

Быстрое и грязное преобразование:

print -($var+1);    # like ~$var in PHP

Если ваш perl использует 64-битные целые числа, это будет невозможно только для $var=-18446744073709551616(0x8000000000000000), это значение, которое вы бы не использовали в 32-битном PHP в любом случае.

Другие вопросы по тегам