@uzi_no_uzi

Как установить в 0 определенные биты?

Имеется такая задача:
Установить в 0 в числе А n битов вправо от позиции p, заменить ими m битов числа В, начиная с позиции q.


И моя попытка решить ее, но происходит не установка битов в 0, а инвертирование
int A, n, p; char num[33];
	cout << "Введите число А ";
	cin >> A;
	cout << endl;
	cout << "Введите c какого бита начинать замену ";
	cin >> p;
	cout << endl;
	cout << "Скольно битов заменяем на 0 ";
	cin >> n;
	cout << endl;

	//Просто вывод числа в двоичном виде
	_itoa_s(A, num, 2);

	cout << "Число А в двоичном  виде: " << num << endl;

	//Создаю маску, одна равна единице, которая сдвинута на p-1 влево
	unsigned int mask = 1 << p-1;


	//Далее идет замена в нули, но т.к. я не знаю, как правильно это сделать, происходит инвертирование
	for (int i = 0; i <= n; i++) {
		A ^= mask;
		mask <<= 1;
	}

	_itoa_s(A, num, 2);

	cout << "Итоговое число: " << num << endl;
  • Вопрос задан
  • 2254 просмотра
Пригласить эксперта
Ответы на вопрос 2
@vanyamba-electronics
template <typename _Type>
_Type clear_bit(_Type value, unsigned int bit)
{
   _Type mask = 1 << bit;
   mask = ~mask;
   return value & mask;
}
Ответ написан
Комментировать
AnnTHony
@AnnTHony
Интроверт
ideone

#include <bitset>
#include <iostream>

int main() {
	const int mask = 0xFFFFFFFF;
	
	int a = 12345678;
	std::cout << std::bitset<32>(a) << std::endl;
	
	int p = 9;
	std::cout << std::bitset<32>(a & (mask << 9 - 1)) << std::endl;
	
	return 0;
}

// 00000000101111000110000101001110
// 00000000101111000110000100000000
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы