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 в любом случае.