Назад к вопросам
Junior
82
questionbank
Как можно умножить или разделить целое число на 2, используя битовые операции?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Для умножения на 2 используется битовый сдвиг влево (<<).
Для деления на 2 используется битовый сдвиг вправо (>>).
int num = 10;
int multiplied_by_2 = num << 1; // num * 2 = 20
int divided_by_2 = num >> 1; // num / 2 = 5 (для положительных чисел)
При делении отрицательного числа на 2 с использованием битового сдвига вправо (>>) результат будет зависеть от типа сдвига:
- Логический (unsigned): В освобождающиеся биты слева будут записываться нули.
- Арифметический (signed): В освобождающиеся биты слева будет записываться значение знакового бита (для сохранения знака).
В C/C++ для знаковых типов используется арифметический сдвиг. Это может привести к неожиданным результатам для нечетных отрицательных чисел:
int negative_num = -7;
int divided_by_2_signed = negative_num >> 1; // -4 (а не -3)
Для корректного деления отрицательных чисел на 2 с округлением в сторону нуля при использовании битового сдвига, можно использовать следующий прием:
int negative_num = -7;
int divided_by_2_corrected = (negative_num >= 0) ? (negative_num >> 1) : ((negative_num + 1) >> 1); // -3