Advertisement
DaniDori

Untitled

Nov 8th, 2023
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.42 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. // Функция для установки четырех младших бит в 1
  7. void SetLowBitsTo1(int& value)
  8. {
  9. // Маска для установки четырех младших бит в 1: 0x0F (в шестнадцатеричной системе)
  10. int mask = 0x0F;
  11.  
  12. // Применяем поразрядную операцию "ИЛИ" для установки битов в 1
  13. value |= mask;
  14. }
  15.  
  16. // Функция для обнуления определенных битов в числе
  17. void ClearBits(int& value, int bitsToClear)
  18. {
  19. // Применяем поразрядную операцию "И" с инвертированной маской для обнуления битов
  20. value &= ~bitsToClear;
  21. }
  22.  
  23. // Функция для умножения числа на 16 с использованием поразрядных операций
  24. int MultiplyBy16(int value)
  25. {
  26. // Умножение на 16 эквивалентно сдвигу битов влево на 4 позиции
  27. return value << 4;
  28. }
  29.  
  30. // Функция для деления числа на 16 с использованием поразрядных операций
  31. int DivideBy16(int value)
  32. {
  33. // Деление на 16 эквивалентно сдвигу битов вправо на 4 позиции
  34. return value >> 4;
  35. }
  36.  
  37. // Функция для установки n-ого бита в 1 с использованием маски 2
  38. int SetNthBitTo1(int value, int n)
  39. {
  40. // Создаем маску 2 с n-ым битом установленным в 1
  41. int mask = 1 << n;
  42.  
  43. // Применяем поразрядную операцию "ИЛИ" для установки бита в 1
  44. return value | mask;
  45. }
  46. void printBin(int n) {
  47. vector<int>ans;
  48. while (n > 0) {
  49. ans.push_back(n % 2);
  50. n /= 2;
  51. }
  52.  
  53. for (int i = ans.size()-1; i>=0; i--)
  54. cout << 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-го битов: " << value << endl;
  104. break;
  105. case 3:
  106. // Исходное значение переменной
  107.  
  108. // Вводим значение с клавиатуры
  109. cout << "Введите целое число: ";
  110. cin >> value;
  111.  
  112. // Умножаем значение на 16 с помощью функции
  113. result = MultiplyBy16(value);
  114.  
  115. // Выводим результат
  116. cout << "Значение после умножения на 16: " << result << endl;
  117. break;
  118. case 4:
  119. // Исходное значение переменной
  120.  
  121. // Вводим значение с клавиатуры
  122. cout << "Введите целое число: ";
  123. cin >> value;
  124.  
  125. // Делим значение на 16 с помощью функции
  126. result = DivideBy16(value);
  127.  
  128. // Выводим результат
  129. cout << "Значение после деления на 16: " << result << endl;
  130. break;
  131. case 5:
  132. // Исходное значение переменной
  133. // Вводим значение с клавиатуры
  134. cout << "Введите целое число: ";
  135. cin >> value;
  136.  
  137. // Вводим значение n с клавиатуры
  138. cout << "Введите значение n: ";
  139. cin >> n;
  140.  
  141. cout << "Представления числа в двоичном виде: " << endl;
  142. // Устанавливаем n-ый бит в 1 с помощью функции
  143. result = SetNthBitTo1(value, n);
  144.  
  145. // Выводим результат
  146.  
  147. cout << "Значение после установки " << n << "-ого бита в 1: " << result << endl;
  148. break;
  149. case 0:
  150. exit = true;
  151. }
  152. }
  153.  
  154. }
  155.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement