Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

61 строка
1.9 KiB
C++

#include <iostream>
#include <iomanip>
#include <cstdint>
#include <bitset>
#include <sstream>
#include <regex>
using namespace std;
// Функция для печати числа типа uint16_t в шестнадцатеричном и двоичном виде
string number_to_string(uint16_t num) {
ostringstream oss;
oss << setfill('0') << setw(2) << hex << static_cast<uint8_t>(num >> 8) << ' '
<< setfill('0') << setw(2) << hex << static_cast<uint8_t>(num);
string hex_str = oss.str();
oss.str("");
oss << bitset<8>(num >> 8) << ' ' << bitset<8>(static_cast<uint8_t>(num));
string bin_str = oss.str();
return hex_str + " " + bin_str;
}
int main() {
uint16_t num1, num2; // Два операнда
char op; // Оператор
// Ввод выражения в формате "num1 op num2"
cin >> dec >> num1 >> op >> num2;
uint16_t result; // Результат операции
// Выполнение операции в зависимости от введенного оператора
switch (op) {
case '&':
result = num1 & num2;
break;
case '|':
result = num1 | num2;
break;
case '^':
result = num1 ^ num2;
break;
default:
cout << "Unknown operator\n";
return 1;
}
// Формирование строки вывода
string output = number_to_string(num1) + " & " + number_to_string(num2) +
" = " + number_to_string(result);
// Замена "&" на соответствующий оператор
if (op == '|') {
output = regex_replace(output, regex("&"), "|");
} else if (op == '^') {
output = regex_replace(output, regex("&"), "^");
}
// Печать результата
cout << output << '\n';
return 0;
}