мне нужна функция с заголовком, как это:Выясните (в C++), если двоичное число префиксом другого
bool is_prefix(int a, int b, int* c) {
// ...
}
Если есть, читается как двоичный номер строки, префикс б, то set * c будет остальной частью b (т. е. «что b больше чем») и возвращает true. В противном случае верните false. Предположим, что двоичные строки всегда начинаются с «1».
Конечно, это легко сделать, сравнивая пополам (левый сдвиг b до b == a). Но есть ли решение, которое более эффективно, без повторения бит?
Пример: a
= 100 (4), b
= 1001 (9). Теперь установите *c
на 1.
Можете ли вы дать числовой пример? Должно ли перекрытие находиться на верхнем или нижнем конце b? – Pixelchemist
Должен ли первый бит префикса начинаться с '1'? Потому что, если биты в 'a' не обращаются к символам в' b', я не вижу, как вы могли бы ограничить биты в 'a' только префикс как' a' и 'b' будут иметь тот же размер, что и целочисленные значения. – JAB
Сдвиньте младшие биты b вправо, пока не будут равны a и b. –