Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
61 строка
1.9 KiB
C++
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;
|
|
} |