#include #include #include using namespace std; //преобразование одной шестнадцатеричной цифры в ASCII символ char nibble_to_hex(uint8_t i) { char digits[] = "0123456789abcdef"; //массив символов для преобразования assert(0x0 <= i && i <= 0xf); //проверка чтобы значение находилось в допустимом диапазоне return digits[i]; //вернуть символ, соотвествующий цифре } //вывод байта в шестнадцатеричной системе на экран void print_in_hex(uint8_t byte) { cout << nibble_to_hex(byte >> 4) << nibble_to_hex(byte & 0xf); } //преобразование типа указателя к байтовому const uint8_t* as_bytes(const void* data) { return reinterpret_cast(data); } //вывод блока данных в виде 16ричных байт void print_in_hex(const void* data, size_t size) { const uint8_t* bytes = as_bytes(data); //преобразовать указатель в байтовый for (size_t i = 0; i < size; i++) { print_in_hex(bytes[i]); // Для удобства чтения: пробелы между байтам, по 16 байт на строку. if ((i + 1) % 16 == 0) { //после вывода 16 байт переходить на новую строку cout << '\n'; } else { cout << ' '; } } } //преобразование одной двоичной цифры в ASCII символ char bit_digit(uint8_t byte, uint8_t bit) { if (byte & (0x1 << bit)) { return '1'; } return '0'; } //вывод байта в двоичной системе на экран void print_in_binary(uint8_t byte) { for (int bit = 7; bit >= 0; bit--) {//побитовый вывод cout << bit_digit(byte, bit); } } //вывод блока данных в виде двоичных байт void print_in_binary(const void* data, size_t size) { const uint8_t* bytes = as_bytes(data); for (size_t i = 0; i < size; i++) { print_in_binary(bytes[i]); // Для удобства чтения: пробелы между байтами, по 4 байта на строку. if ((i + 1) % 4 == 0) { cout << '\n'; } else { cout << ' '; } } } int main() { string action; uint16_t operand1, operand2, result; setlocale(LC_ALL, "Russian");//русская локаль cout << "Введите выражение: "; //ввод элементов выражения cin >> operand1; cin >> action; cin >> operand2; if (action == "&") //в зависимости от введенного действия выполняем соотв операцию над операндами { result = operand1 & operand2; } else if (action == "|") { result = operand1 | operand2; } else if (action == "^") { result = operand1 ^ operand2; } else { cout << "Неизвестное действие" << endl; system("pause"); return 1; } //вывод в 16ричной системе print_in_hex(&operand1, sizeof(operand1)); cout << action << " "; print_in_hex(&operand2, sizeof(operand2)); cout << "= "; print_in_hex(&result, sizeof(result)); cout << endl; //и двоичной print_in_binary(&operand1, sizeof(operand1)); cout << action << endl; print_in_binary(&operand2, sizeof(operand2)); cout << "=" << endl; print_in_binary(&result, sizeof(result)); cout << endl; system("pause"); return 0; }