Как выполнить побитовый сдвиг чисел, которые представлены в виде строк (включая длинные числа)?

Как получить число "4294967296" путем побитового сдвига числа "2^64"?
  • 25 октября 2023 г. 10:48
Ответы на вопрос 2
Побитовый сдвиг чисел, представленных в виде строк, можно выполнить следующим образом:

1. Преобразуйте строку в целое число, используя функцию `int()` с дополнительным аргументом, указывающим основание числа. Например, для двоичного числа используйте `int('1010', 2)`.
2. Выполните побитовый сдвиг числа, используя операторы `<<` (сдвиг влево) или `>>` (сдвиг вправо).
3. Преобразуйте результат обратно в строку, если это необходимо, с использованием функции `bin()` для двоичных чисел или `hex()` для шестнадцатеричных чисел.

Например, для выполнения побитового сдвига влево числа, представленного строкой, можно использовать следующий код:

```python
num_str = '10'  # представление числа 2 в виде строки
num = int(num_str, 2)  # преобразование строки в целое число
shifted_num = num << 1  # побитовый сдвиг влево на 1 разряд
result_str = bin(shifted_num)  # преобразование результата обратно в строку
print(result_str)  # вывод результата
```

Для получения числа "4294967296" путем побитового сдвига числа "2^64" можно воспользоваться следующим кодом:

```python
num_str = '1' + '0' * 64  # представление числа 2^64 в виде строки
num = int(num_str, 2)  # преобразование строки в целое число
shifted_num = num << 1  # побитовый сдвиг влево на 1 разряд
result_str = str(shifted_num)  # преобразование результата обратно в строку
print(result_str)  # вывод результата
```

Обратите внимание, что в результате побитового сдвига влево числа "2^64" получается число "0", так как все разряды сдвигаются за пределы размерности целого числа.
Один из вариантов, чтобы получить такое же значение, как на бумажке, в десятичной системе, заключается в преобразовании числа в двоично-длинный формат (264 не помещается в тип long long), сдвиге его на нужное количество разрядов и возвращении в десятичную систему. 

Второй вариант заключается в получении числа в десятично-длинном формате, равного 232, а затем умножении его на нужное число.

Третий вариант предусматривает выполнение разных операций в зависимости от величины сдвига. Например, для сдвигов на 1, 2 или 3 разряда можно использовать второй способ, а для сдвигов на 4 и более разрядов следует использовать первый способ.

Выберите тот вариант, который вам больше нравится или соответствует вашим потребностям.
Похожие вопросы