Advertisement
DaniDori

Работа в 16-ричной сс испр

Nov 9th, 2023
520
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.78 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.     // Исходное значение переменной в шестнадцатеричной системе
  63.     int value;
  64.     int result;
  65.     int n;
  66.     while (!exit) {
  67.         cout << "\nМеню:" << endl;
  68.         cout << "1. Функция для установки четырех младших бит в 1" << endl;
  69.         cout << "2. Функция для обнуления определенных битов в числе" << endl;
  70.         cout << "3. Функция для умножения числа на 16 с использованием поразрядных операций" << endl;
  71.         cout << "4. Функция для деления числа на 16 с использованием поразрядных операций" << endl;
  72.         cout << "5.  Функция для установки n-ого бита в 1 с использованием маски 2" << endl;
  73.         cout << "0. Выход" << endl;
  74.         cout << "Введите ваш выбор: ";
  75.         cin >> key;
  76.         switch (key) {
  77.         case 1:
  78.             // Выводим исходное значение
  79.             cout << "Введите целое число: ";
  80.             cin >> value;
  81.             cout << "Исходное значение:" << value << endl;
  82.             cout << "Исходное значение: 0b";
  83.             printBin(value);
  84.             cout << endl;
  85.             cout << "Исходное значение: 0x" << hex << value << endl;
  86.            
  87.             // Устанавливаем четыре младших бита в 1
  88.             SetLowBitsTo1(value);
  89.             // Выводим результат
  90.  
  91.             cout << "Значение после установки четырех младших бит в 1: " << dec << value << endl;
  92.             cout << "Значение после установки четырех младших бит в 1: 0x" << hex << value << endl;
  93.             cout << "Значение после установки четырех младших бит в 1: 0b";
  94.             printBin(value);
  95.             cout << endl;
  96.             break;
  97.         case 2:
  98.             // Вводим значение с клавиатуры
  99.             cout << "Введите целое число: ";
  100.             cin >> value;
  101.             cout << "Исходное значение: 0b";
  102.             printBin(value);
  103.             cout << endl;
  104.             cout << "Исходное значение: 0x" << hex << value << endl;
  105.             // Маска для обнуления 3-го, 11-го и 5-го битов
  106.             mask = (1 << 3) | (1 << 11) | (1 << 5);
  107.  
  108.             // Обнуляем указанные биты
  109.             ClearBits(value, mask);
  110.  
  111.             // Выводим результат
  112.             cout << "Значение после обнуления 3-го, 11-го и 5-го битов: " << dec << value << endl;
  113.             cout << "Значение после обнуления 3-го, 11-го и 5-го битов: 0b";
  114.             printBin(value);
  115.             cout << endl;
  116.             cout << "Значение после обнуления 3-го, 11-го и 5-го битов: 0x"<< hex << value << endl;
  117.             break;
  118.         case 3:
  119.             // Вводим значение с клавиатуры
  120.             cout << "Введите целое число: ";
  121.             cin >> value;
  122.  
  123.             //Исходное в 2 и 16-ричной
  124.             cout << "Исходное значение: 0b";
  125.             printBin(value);
  126.             cout << endl;
  127.             cout << "Исходное значение: 0x" << hex << value << endl;
  128.  
  129.             // Умножаем значение на 16 с помощью функции
  130.             result = MultiplyBy16(value);
  131.  
  132.             // Выводим результат
  133.             cout << "Значение после умножения на 16: " << dec << result << endl;
  134.             cout << "Значение после умножения на 16: 0x"<< hex << result << endl;
  135.             cout << "Значение после умножения на 16: 0b";
  136.             printBin(result);
  137.             cout << endl;
  138.             break;
  139.         case 4:
  140.             // Вводим значение с клавиатуры
  141.             cout << "Введите целое число: ";
  142.             cin >> value;
  143.  
  144.  
  145.             //Исходное в 2 и 16-ричной
  146.             cout << "Исходное значение: 0b";
  147.             printBin(value);
  148.             cout << endl;
  149.             cout << "Исходное значение: 0x" << hex << value << endl;
  150.  
  151.             // Делим значение на 16 с помощью функции
  152.             result = DivideBy16(value);
  153.  
  154.             // Выводим результат
  155.             cout << "Значение после деления на 16: " << dec << result << endl;
  156.             cout << "Значение после деления на 16: 0x" << hex << result << endl;
  157.             cout << "Значение после деления на 16: 0b";
  158.             printBin(result);
  159.             cout << endl;
  160.  
  161.             break;
  162.         case 5:
  163.             // Исходное значение переменной
  164.             // Вводим значение с клавиатуры
  165.             cout << "Введите целое число: ";
  166.             cin >> value;
  167.  
  168.             //Исходное в 2 и 16-ричной
  169.             cout << "Исходное значение: 0b";
  170.             printBin(value);
  171.             cout << endl;
  172.             cout << "Исходное значение: 0x" << hex << value << endl;
  173.  
  174.             // Вводим значение n с клавиатуры
  175.             cout << "Введите значение n: ";
  176.             cin >> n;
  177.  
  178.             cout << "Представления числа в двоичном виде: " << endl;
  179.             // Устанавливаем n-ый бит в 1 с помощью функции
  180.             result = SetNthBitTo1(value, n);
  181.  
  182.             // Выводим результат
  183.  
  184.             cout << "Значение после установки " << n << "-ого бита в 1: " << dec << result << endl;
  185.             cout << "Значение после установки " << n << "-ого бита в 1: 0x" << hex << result << endl;
  186.             cout << "Значение после установки " << n << "-ого бита в 1: 0b";
  187.             printBin(result);
  188.             cout << endl;
  189.             break;
  190.         case 0:
  191.             exit = true;
  192.         }
  193.     }
  194.  
  195. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement