Advertisement
DaniDori

С исправлением

Nov 8th, 2023
376
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.62 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <iterator>
  5. using namespace std;
  6.  
  7. // Функция для установки четырех младших бит в 1
  8. void SetLowBitsTo1(int& value)
  9. {
  10.     // Маска для установки четырех младших бит в 1: 0x0F (в шестнадцатеричной системе)
  11.     int mask = 0x0F;
  12.  
  13.     // Применяем поразрядную операцию "ИЛИ" для установки битов в 1
  14.     value |= mask;
  15. }
  16.  
  17. // Функция для обнуления определенных битов в числе
  18. void ClearBits(int& value, int bitsToClear)
  19. {
  20.     // Применяем поразрядную операцию "И" с инвертированной маской для обнуления битов
  21.     value &= ~bitsToClear;
  22. }
  23.  
  24. // Функция для умножения числа на 16 с использованием поразрядных операций
  25. int MultiplyBy16(int value)
  26. {
  27.     // Умножение на 16 эквивалентно сдвигу битов влево на 4 позиции
  28.     return value << 4;
  29. }
  30.  
  31. // Функция для деления числа на 16 с использованием поразрядных операций
  32. int DivideBy16(int value)
  33. {
  34.     // Деление на 16 эквивалентно сдвигу битов вправо на 4 позиции
  35.     return value >> 4;
  36. }
  37.  
  38. // Функция для установки n-ого бита в 1 с использованием маски 2
  39. int SetNthBitTo1(int value, int n)
  40. {
  41.     // Создаем маску 2 с n-ым битом установленным в 1
  42.     int mask = 1 << n;
  43.  
  44.     // Применяем поразрядную операцию "ИЛИ" для установки бита в 1
  45.     return value | mask;
  46. }
  47. void printBin(int n) {
  48.     vector<int>ans;
  49.     while (n > 0) {
  50.         ans.push_back(n % 2);
  51.         n /= 2;
  52.     }
  53.     for (int i = ans.size()-1; i>=0; i--)
  54.         cout << ans[i];
  55. }
  56. int main()
  57. {
  58.     setlocale(LC_ALL, "Russian");
  59.     bool exit = false;
  60.     int key;
  61.     int mask;
  62.     int value = 0x12345678;
  63.     int result;
  64.     int n;
  65.     while (!exit) {
  66.         cout << "\nМеню:" << endl;
  67.         cout << "1. Функция для установки четырех младших бит в 1" << endl;
  68.         cout << "2. Функция для обнуления определенных битов в числе" << endl;
  69.         cout << "3. Функция для умножения числа на 16 с использованием поразрядных операций" << endl;
  70.         cout << "4. Функция для деления числа на 16 с использованием поразрядных операций" << endl;
  71.         cout << "5.  Функция для установки n-ого бита в 1 с использованием маски 2" << endl;
  72.         cout << "0. Выход" << endl;
  73.         cout << "Введите ваш выбор: ";
  74.         cin >> key;
  75.         switch (key) {
  76.         case 1:
  77.             // Исходное значение переменной в шестнадцатеричной системе
  78.  
  79.             // Выводим исходное значение
  80.             cout << "Исходное значение: 0b";
  81.             printBin(value);
  82.             cout << endl;
  83.             cout << "Исходное значение: 0x" << hex << value << endl;
  84.             // Устанавливаем четыре младших бита в 1
  85.             SetLowBitsTo1(value);
  86.             // Выводим результат
  87.             cout << "Значение после установки четырех младших бит в 1: 0x" << hex << value << endl;
  88.             break;
  89.         case 2:
  90.             // Исходное значение переменной
  91.  
  92.             // Вводим значение с клавиатуры
  93.             cout << "Введите целое число: ";
  94.             cin >> value;
  95.  
  96.             // Маска для обнуления 3-го, 11-го и 5-го битов
  97.             mask = (1 << 3) | (1 << 11) | (1 << 5);
  98.  
  99.             // Обнуляем указанные биты
  100.             ClearBits(value, mask);
  101.  
  102.             // Выводим результат
  103.             cout << "Значение после обнуления 3-го, 11-го и 5-го битов: 0b";
  104.             printBin(value);
  105.             cout << endl;
  106.             cout << "Значение после обнуления 3-го, 11-го и 5-го битов: " << value << endl;
  107.             break;
  108.         case 3:
  109.             // Исходное значение переменной
  110.  
  111.             // Вводим значение с клавиатуры
  112.             cout << "Введите целое число: ";
  113.             cin >> value;
  114.  
  115.             // Умножаем значение на 16 с помощью функции
  116.             result = MultiplyBy16(value);
  117.  
  118.             // Выводим результат
  119.             cout << "Значение после умножения на 16: " << result << endl;
  120.             break;
  121.         case 4:
  122.             // Исходное значение переменной
  123.  
  124.             // Вводим значение с клавиатуры
  125.             cout << "Введите целое число: ";
  126.             cin >> value;
  127.  
  128.             // Делим значение на 16 с помощью функции
  129.             result = DivideBy16(value);
  130.  
  131.             // Выводим результат
  132.             cout << "Значение после деления на 16: " << result << endl;
  133.             break;
  134.         case 5:
  135.             // Исходное значение переменной
  136.             // Вводим значение с клавиатуры
  137.             cout << "Введите целое число: ";
  138.             cin >> value;
  139.  
  140.             // Вводим значение n с клавиатуры
  141.             cout << "Введите значение n: ";
  142.             cin >> n;
  143.  
  144.             cout << "Представления числа в двоичном виде: " << endl;
  145.             // Устанавливаем n-ый бит в 1 с помощью функции
  146.             result = SetNthBitTo1(value, n);
  147.  
  148.             // Выводим результат
  149.  
  150.             cout << "Значение после установки " << n << "-ого бита в 1: " << result << endl;
  151.             break;
  152.         case 0:
  153.             exit = true;
  154.         }
  155.     }
  156.  
  157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement