@avion123678

Битовое представление чисел в c++?

Здравствуйте, как решить данную задачу на языке с++:

1. Вычеркнуть i-й бит из двоичного представления целого положительного числа (младшие i-го биты остаются на месте, старшие сдвигаются на один разряд вправо).
  • Вопрос задан
  • 2596 просмотров
Решения вопроса 1
0xD34F
@0xD34F
Делаете две битовые маски - все единицы для младших разрядов (до вырезаемого бита), все единицы для старших (после вырезаемого бита). Применяете обе маски к числу, смещаете старшие разряды на единицу вправо, объединяете получившиеся числа:

int value = // ваше число, чему-то там равно, вам виднее

int bit = // номер вырезаемого бита, тоже вам виднее

int maskLower = 0;
for (int i = 0; i < bit - 1; i++) {
  maskLower |= 1 << i;
}
int maskUpper = ~maskLower;

value = ((value >> 1) & maskUpper) | (value & maskLower);


UPD. Цикл для создания маски конечно лишний, как справедливо заметил в комментариях res2001.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы