Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- // Функция для установки четырех младших бит в 1
- void SetLowBitsTo1(int& value)
- {
- // Маска для установки четырех младших бит в 1: 0x0F (в шестнадцатеричной системе)
- int mask = 0x0F;
- // Применяем поразрядную операцию "ИЛИ" для установки битов в 1
- value |= mask;
- }
- // Функция для обнуления определенных битов в числе
- void ClearBits(int& value, int bitsToClear)
- {
- // Применяем поразрядную операцию "И" с инвертированной маской для обнуления битов
- value &= ~bitsToClear;
- }
- // Функция для умножения числа на 16 с использованием поразрядных операций
- int MultiplyBy16(int value)
- {
- // Умножение на 16 эквивалентно сдвигу битов влево на 4 позиции
- return value << 4;
- }
- // Функция для деления числа на 16 с использованием поразрядных операций
- int DivideBy16(int value)
- {
- // Деление на 16 эквивалентно сдвигу битов вправо на 4 позиции
- return value >> 4;
- }
- // Функция для установки n-ого бита в 1 с использованием маски 2
- int SetNthBitTo1(int value, int n)
- {
- // Создаем маску 2 с n-ым битом установленным в 1
- int mask = 1 << n;
- // Применяем поразрядную операцию "ИЛИ" для установки бита в 1
- return value | mask;
- }
- void printBin(int n) {
- vector<int>ans;
- while (n > 0) {
- ans.push_back(n % 2);
- n /= 2;
- }
- for (int i = ans.size()-1; i>=0; i--)
- cout << i;
- }
- int main()
- {
- setlocale(LC_ALL, "Russian");
- bool exit = false;
- int key;
- int mask;
- int value = 0x12345678;
- int result;
- int n;
- while (!exit) {
- cout << "\nМеню:" << endl;
- cout << "1. Функция для установки четырех младших бит в 1" << endl;
- cout << "2. Функция для обнуления определенных битов в числе" << endl;
- cout << "3. Функция для умножения числа на 16 с использованием поразрядных операций" << endl;
- cout << "4. Функция для деления числа на 16 с использованием поразрядных операций" << endl;
- cout << "5. Функция для установки n-ого бита в 1 с использованием маски 2" << endl;
- cout << "0. Выход" << endl;
- cout << "Введите ваш выбор: ";
- cin >> key;
- switch (key) {
- case 1:
- // Исходное значение переменной в шестнадцатеричной системе
- // Выводим исходное значение
- cout << "Исходное значение: 0b";
- printBin(value);
- cout << endl;
- cout << "Исходное значение: 0x" << hex << value << endl;
- // Устанавливаем четыре младших бита в 1
- SetLowBitsTo1(value);
- // Выводим результат
- cout << "Значение после установки четырех младших бит в 1: 0x" << hex << value << endl;
- break;
- case 2:
- // Исходное значение переменной
- // Вводим значение с клавиатуры
- cout << "Введите целое число: ";
- cin >> value;
- // Маска для обнуления 3-го, 11-го и 5-го битов
- mask = (1 << 3) | (1 << 11) | (1 << 5);
- // Обнуляем указанные биты
- ClearBits(value, mask);
- // Выводим результат
- cout << "Значение после обнуления 3-го, 11-го и 5-го битов: " << value << endl;
- break;
- case 3:
- // Исходное значение переменной
- // Вводим значение с клавиатуры
- cout << "Введите целое число: ";
- cin >> value;
- // Умножаем значение на 16 с помощью функции
- result = MultiplyBy16(value);
- // Выводим результат
- cout << "Значение после умножения на 16: " << result << endl;
- break;
- case 4:
- // Исходное значение переменной
- // Вводим значение с клавиатуры
- cout << "Введите целое число: ";
- cin >> value;
- // Делим значение на 16 с помощью функции
- result = DivideBy16(value);
- // Выводим результат
- cout << "Значение после деления на 16: " << result << endl;
- break;
- case 5:
- // Исходное значение переменной
- // Вводим значение с клавиатуры
- cout << "Введите целое число: ";
- cin >> value;
- // Вводим значение n с клавиатуры
- cout << "Введите значение n: ";
- cin >> n;
- cout << "Представления числа в двоичном виде: " << endl;
- // Устанавливаем n-ый бит в 1 с помощью функции
- result = SetNthBitTo1(value, n);
- // Выводим результат
- cout << "Значение после установки " << n << "-ого бита в 1: " << result << endl;
- break;
- case 0:
- exit = true;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement