1647. Обнулить биты
Дано целые числа n и k . Обнулите в числе n его последние k бит и выведите результат. Рекомендуется сделать эту задачу без использования циклов.
Вход. Два числа n (0 ≤ n ≤ 2 31 – 1) и k (0 ≤ k ≤ 30).
Выход. Выведите число, полученное в результате обнуления k последних бит.
РЕШЕНИЕ
элементарная задача – битовые операции
Построим маску mask, в которой на последних k позициях будут стоять нули, а на остальных единицы. Искомый ответ равен битовой операции “and” входного значения n и маски mask .
Требуемую маску можно также получить, сдвинув число -1 (в битовом представлении все единицы) на k позиций влево. после чего k правых бит в нем примут значение 0.
Еще одно решение: можно сдвинуть число n на k бит вправо, а затем на k бит влево. То есть ответом будет значение ( n >> k) k.
Читаем входные данные.
Вычисляем и выводим ответ.
Реализация второй вариант
Обнулить последние биты
Напишите программу, которая обнуляет заданное количество последних бит числа.
Входные данные
Во входном потоке в единственной строке через пробел записаны два целых числа A (−231≤A≤231−1) и i (0≤i≤32).
Выходные данные
В выходной поток следует записать единственное целое число — число A, у котого обнулены последние i бит.
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
В каждом байте числа обнулить 0-ой и 7-ой биты и сделать единичными 3-ий и 4-ый биты
Надо: Прочитать беззнаковое целое число из стандартного потока ввода и в каждом байте числа.
Обнулить определенные биты
Как обнулить определенные биты в регистре? Например AX=ABCD нужно сделать AX=0B00. Я тут сам.
Можно ли обнулить биты с использованием XOR
Здравствуйте, есть двоичное 16 битное число, можно ли с помощью XOR обнулить 4, 7, 10 биты.
Обнулить биты указателя типа void*
Привет:) Необходимо занулить, скажем, 4 последних бита указателя типа void*. Пробовал побитовые.
Арифметика: Условия задач
Во всех упражнениях нельзя использовать арифметические операторы сложения, умножения, вычитания, деления. Вместо них нужно использовать побитовые операторы & , | , ~ , ^ , > . Входное число A не превышает 2 32 -1 (если это не указано особо). Номера битов всегда задаются корректно, то есть принимают значения от 0 до 31. Ввод и вывод данных производится через стандартные потоки ввода-вывода.
Для решения этой задачи надо использовать операции сдвига вправо и сдвига влева
Напишите программу, которая обнуляет заданное количество последних бит числа
Информатика. 10 класс (Повышенный уровень)
1. Даны два натуральных числа a и b . Составить программу, реализующую для этих чисел битовую операцию по модулю два.
2. Вычислите xor всех чисел на отрезке [a, b] .
3. Реализуйте программы из примера 27.16. Протестируйте для различных входных данных.
4. Дано число n . Используя битовые операции, замените единицу в младшем разряде двоичной записи числа n на ноль.
5. Даны два натуральных числа a и n . Найдите такое минимальное натуральное число b , что a xor b нацело делится на n .
6. Даны натуральные числа а и k . Выведите число, которое состоит только из k последних бит числа а (то есть, используя битовые операции, обнулите все биты числа а, кроме последних k ).
7. Даны натуральные числа n и k . Используя битовые операции, обнулите в числе n его последние k бит и выведите результат.
8. Значением функции Фенвика для числа n называется максимальная степень двойки, на которую нацело делится число n . По заданному числу n определите для него значение функции Фенвика.
9. Дано натуральное число. Определите, сколько раз встречаются две подряд идущие единицы (11) в двоичном представлении этого числа (в двоичном представлении 11110111 оно встречается 5 раз).
10. Дано натуральное десятичное число n . Поменяйте местами два бита с заданными номерами в двоичном представлении этого числа. Например, если n = 5 и требуется поменять биты с номерами 1 и 2, то ответом будет 3.
11. Дано натуральное десятичное число n . Вычеркните i -й бит из двоичного представления этого числа (младшие i -го биты остаются на месте, старшие сдвигаются на один разряд вправо). Например, если n10 = 29 (n2 = 111012) и i = 1 , ответом будет 1510 (11112) .
12. Даны три натуральные числа. Найдите новое число, каждый бит которого равен тому значению, которое встречается чаще среди битов с таким же номером у данных чисел.
13. Для настольной игры используются карточки с номерами от 1 до n (натуральное число n не превышает 10 6 ). Одна карточка потерялась. Составьте программу ее поиска. Задано: число n и n — 1 номеров оставшихся карточек.
14. Дома у Ксюши было 2 одинаковых набора кубиков из английских букв, но во время очередной уборки один из кубиков затерялся. Помогите Ксюше определить, какой из кубиков отсутствует в одном из наборов.
15. Дано натуральное десятичное число n . Образуются все возможные левые циклические сдвиги двоичного представления числа n , у которых первая цифра числа переносится в конец.
Например, если n = 1110 (10112) , то его циклические сдвиги: 01112, 11102, 11012, 10112 . Максимальное значение m у всех полученных таким образом чисел будет иметь число 11102 = 1410 .
Составьте программу, которая для заданного числа n определяет максимальное значение m .
16. Дано натуральное число n . С этим числом разрешено неограниченное количество раз проводить перестановку значащих бит заданного числа, получая таким образом новые числа. Найдите наибольшую разность двух чисел, каждое из которых можно получить в результате выполнений таких перестановок.
17. Дано натуральное число a . Напишите выражение, результатом которого является значение данного числа, у которого младший нулевой бит установлен в 1.
18. Дано натуральное число a . Напишите выражение, результатом которого является преобразование данного числа в число, у которого все биты установлены в 1, кроме младшего нулевого бита .