#include #include #include // Вывод одного байта в hex (две цифры, верхний регистр). static void print_byte_hex(uint8_t byte) { static const char digits[] = "0123456789ABCDEF"; std::cout << digits[byte >> 4] << digits[byte & 0x0F]; } // Вывод 2-байтового числа в hex (младший байт первым, через пробел). static void print_hex_uint16(uint16_t value) { const uint8_t* p = reinterpret_cast(&value); print_byte_hex(p[0]); std::cout << ' '; print_byte_hex(p[1]); } // Вывод одного байта в двоичном виде. static void print_byte_binary(uint8_t byte) { for (int bit = 7; bit >= 0; --bit) { std::cout << ((byte >> bit) & 1); } } // Вывод 2-байтового числа в двоичном виде (без пробела между байтами). static void print_binary_uint16(uint16_t value) { const uint8_t* p = reinterpret_cast(&value); print_byte_binary(p[0]); print_byte_binary(p[1]); } int main() { uint16_t lhs = 0; uint16_t rhs = 0; char op = 0; if (!(std::cin >> lhs >> op >> rhs)) { std::cout << "Ошибка ввода\n"; return 1; } uint16_t result = 0; switch (op) { case '&': result = lhs & rhs; break; case '|': result = lhs | rhs; break; case '^': result = lhs ^ rhs; break; default: std::cout << "Ошибка: поддерживаются только &, |, ^\n"; return 1; } // Отражаем исходное выражение в десятичном виде std::cout << lhs << ' ' << op << ' ' << rhs << '\n'; // Hex-представление print_hex_uint16(lhs); std::cout << ' ' << op << ' '; print_hex_uint16(rhs); std::cout << " = "; print_hex_uint16(result); std::cout << '\n'; // Binary-представление print_binary_uint16(lhs); std::cout << ' ' << op << '\n'; print_binary_uint16(rhs); std::cout << " =\n"; print_binary_uint16(result); std::cout << '\n'; return 0; }