Advertisement
DaniDori

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

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