Задать вопрос
@uzi_no_uzi

Инвертировать определенные биты в числе?

Имеется такая задача:
Ввести целое число A. Инвертировать все биты с 4 по 8, включая эти биты. Вывести полученное число.


#include <iostream> 
using namespace std;
void main()
{
	setlocale(LC_CTYPE, "Russian");
	
	int A; char num[33];
	cout << "Введите число А ";
	cin >> A;
	cout << endl;

	_itoa_s(A, num, 2);

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

	unsigned int mask = 1 << 4;

	for (int i = 0; i <= 3; i++) {
		cout << 'х';
		A ^= mask;
	}

	_itoa_s(A, num, 2);

	cout << num;

}


Как можно ее решить используя побитовые операции, у меня были некоторые идеи с маской, но я не знаю как правильно ее реализовать.

Я думал можно создать маску вида: 10000 (1 в 4-ом бите) и каждый раз сдвигать на один до 8ого бита. При этом делая какую-то проверку
  • Вопрос задан
  • 2908 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
0xD34F
@0xD34F
были некоторые идеи с маской, но я не знаю как правильно ее реализовать

Это хорошо, что вы знаете про маски. Осталось погуглить, что такое xor.
Ответ написан
devalone
@devalone
̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
xor с маской, где установить все биты в 0, а те, что надо инвертировать, в 1. Ах, да, для читабельности, используй бинарный литерал https://en.cppreference.com/w/cpp/language/integer...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@vanyamba-electronics
y = (x & 0x0F) | (~x & 0xF0);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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