Побитовое умножение в С++, поразрядный оператор И
С помощью поразрядного оператора И (который записывается как &) можно устанавливать реальные биты в байтах или словах для типов данных char и int.
Пример программы, которая меняет регистр английский букв, делает из маленьких заглавные.
Набор ASCII символов опеределен так, что код заглавных и строчных букв отличается на 32 (0010 0000).
Следовательно нам нужно в строчной букве поменять 6-й бит.
Код буквы 'a' = 0110 0001
Код буквы 'A' = 0100 0001
(биты считаются с конца)
Чтобы с помощью логического И поменять только 6-й бит, нужно в двоичном коде буквы 'a' = 0110 0001
изменить шестой бит с 1 на 0. Это можно сделать умножив логически на 0, а все остальные биты оставить НЕИЗМЕННЫМИ, для этого умножаемм логически на 1.
Следовательно нам нужно умножить на 1101 1111
Мы знаем что:
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1
Десятичное представление двоичного числа 1101 1111 = 223
#include <iostream>
using namespace std;
int main ()
{
char ch;
do {
cin >> ch;
ch = ch & 223;
cout << ch;
} while (ch != 'Q');
return 0;
}
Операция ch = ch & 223; оставляет все биты в переменной нетронутыми, за исключением шестого (он сбрасывается в нуль)
Поразрядный оператор ИЛИ или как из прописных сделать строчные
Чтобы из прописных в ASCII сделать строчные, нужно изменить 6-й бит (то есть установить его в 1).
Для этого нам нужно использовать ИЛИ с 0010 0000 (десятичное 32)
ch=ch | 32;
Оставить свой ответ: