побитовые операторы — PHP: почему `1 & lt; & lt; 63` отрицателен и как я могу это изменить?

Согласно названию код:

$a=<int> value;
$b=1<<$a;
echo "\n".$b."\n";
printf("%064b",$b);
$b=$b>>$a;
echo "\n".$b."\n";
printf("%064b",$b);

для значения = 62 отпечатка (как и ожидалось):

4611686018427387904
0100000000000000000000000000000000000000000000000000000000000000
1
0000000000000000000000000000000000000000000000000000000000000001

но для значения = 63 (максимум, но без переполнения) печатает:

-9223372036854775808
1000000000000000000000000000000000000000000000000000000000000000
-1
1111111111111111111111111111111111111111111111111111111111111111

Могу ли я сделать что-то, чтобы сделать >> обратная сторона << во втором случае?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector