Mediumshift
Чем arithmetic shift отличается от logical shift?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Logical shift (для unsigned) всегда заполняет нулями. Arithmetic shift (для signed >>) копирует знаковый бит, сохраняя знак.
int x = -8;
x >> 1; // -4 (arithmetic — копируется знаковый бит)
unsigned y = 0xFFFFFFFC;
y >> 1; // 0x7FFFFFFE (logical — заполнение нулём)Для unsigned поведение определено однозначно. Для signed << — UB до C++20 при выходе за диапазон; >> — implementation-defined (на современных платформах всегда arithmetic). С C++20 signed гарантированно two's complement. Совет: для битовых операций — unsigned.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.