#include #include #include using namespace std; // Массив символов для hex const char hex_chars[] = "0123456789ABCDEF"; // Функция для преобразования данных в байты const uint8_t* to_bytes(const void* data) { return reinterpret_cast(data); } // Функция для преобразования полубайта в hex символ char half_byte_to_hex(uint8_t i) { return hex_chars[i & 0xf]; } // Функция для печати байта в hex формате void print_hex(uint8_t byte) { cout << half_byte_to_hex(byte >> 4) << half_byte_to_hex(byte & 0xf); } // Функция для печати данных в hex формате void print_hex(const void* data, size_t size) { const uint8_t *bytes = to_bytes(data); for (size_t i = 0; i < size; i++) { print_hex(bytes[i]); if ((i + 1) % 16 == 0) { cout << '\n'; } else { cout << ' '; } } } // Функция для получения бита из байта char get_bit(uint8_t byte, uint8_t bit) { return (byte & (0x1 << bit)) ? '1' : '0'; } // Функция для печати байта в binary формате void print_binary(uint8_t byte) { for (int bit = 7; bit >= 0; bit--) { cout << get_bit(byte, bit); } } // Функция для печати данных в binary формате void print_binary(const void* data, size_t size) { const uint8_t *bytes = to_bytes(data); for (size_t i = 0; i < size; i++) { print_binary(bytes[i]); if ((i + 1) % 4 == 0) { cout << '\n'; } else { cout << ' '; } } } // Функция для вывода результатов в виде таблички void print_results_table(uint16_t num1, uint16_t num2, uint16_t result, const char* operation) { cout << "| Операнд 1 (HEX) | Операнд 2 (HEX) | Результат (HEX) |\n"; cout << "|-----------------|-----------------|-----------------|\n"; cout << "| "; print_hex(&num1, sizeof(uint16_t)); cout << " | "; print_hex(&num2, sizeof(uint16_t)); cout << " | "; print_hex(&result, sizeof(uint16_t)); cout << " |\n\n"; cout << "| Операнд 1 (BIN) | Операнд 2 (BIN) | Результат (BIN) |\n"; cout << "|-----------------|-----------------|-----------------|\n"; cout << "| "; print_binary(&num1, sizeof(uint16_t)); cout << " | "; print_binary(&num2, sizeof(uint16_t)); cout << " | "; print_binary(&result, sizeof(uint16_t)); cout << " |\n"; } int main() { setlocale(LC_ALL, "Russian"); uint16_t num1, num2, result = 0; char operation[8]; bool is_calculated = false; cout << "Введите выражение: "; cin >> num1 >> operation >> num2; switch (operation[0]) { case '&': result = num1 & num2; is_calculated = true; break; case '|': result = num1 | num2; is_calculated = true; break; case '^': result = num1 ^ num2; is_calculated = true; break; default: cout << "Неизвестная операция\n"; break; } if (is_calculated) { print_results_table(num1, num2, result, operation); } cin >> result; return 0; }