diff --git a/lab04/main.cpp b/lab04/main.cpp index 2863d8b..12d3a44 100644 --- a/lab04/main.cpp +++ b/lab04/main.cpp @@ -51,60 +51,68 @@ bit_digit(uint8_t byte, uint8_t bit) { return '0'; } -void -print_in_binary(uint8_t byte) { +#include +#include +#include + +using namespace std; + +// ... (остальные функции из предыдущего кода остаются без изменений) + +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 = static_cast(data); -int main() -{ + // Печатаем байты в обратном порядке для правильного отображения чисел + for (int i = size - 1; i >= 0; i--) { + print_in_binary(bytes[i]); + + // Разделители для удобства чтения + if (i > 0) { + if (i % 4 == 0) + cout << "\n"; + else + cout << " "; + } + } +} + +int main() { + // Тестирование чисел из лекционного слайда + uint16_t a = 0x4d2; // 1234 в десятичной + uint16_t b = 0x1234; // 4660 в десятичной + + cout << "0x4d2 (1234) in binary:\n"; + print_in_binary(&a, sizeof(a)); + cout << "\n\n"; + + cout << "0x1234 (4660) in binary:\n"; + print_in_binary(&b, sizeof(b)); + cout << "\n\n"; + + // Пример с арифметическими операциями + uint16_t sum = a + b; + uint16_t diff = b - a; + uint16_t xorr = a ^ b; + + cout << "Sum (0x4d2 + 0x1234):\n"; + print_in_binary(&sum, sizeof(sum)); + cout << "\n\n"; + + cout << "Difference (0x1234 - 0x4d2):\n"; + print_in_binary(&diff, sizeof(diff)); + cout << "\n\n"; - assert(nibble_to_hex(0x0) == '0'); - assert(nibble_to_hex(0x1) == '1'); - assert(nibble_to_hex(0x2) == '2'); - assert(nibble_to_hex(0x3) == '3'); - assert(nibble_to_hex(0x4) == '4'); - assert(nibble_to_hex(0x5) == '5'); - assert(nibble_to_hex(0x6) == '6'); - assert(nibble_to_hex(0x7) == '7'); - assert(nibble_to_hex(0x8) == '8'); - assert(nibble_to_hex(0x9) == '9'); - assert(nibble_to_hex(0xa) == 'a'); - assert(nibble_to_hex(0xb) == 'b'); - assert(nibble_to_hex(0xc) == 'c'); - assert(nibble_to_hex(0xd) == 'd'); - assert(nibble_to_hex(0xe) == 'e'); - assert(nibble_to_hex(0xf) == 'f'); - - uint8_t byte = 0xff; - - uint8_t u8 = 0x42; - cout << "u8 bytes: "; - print_in_hex(&u8, sizeof(u8)); - cout << '\n'; - - uint16_t u16 = 0x42; - cout << "u16 bytes: "; - print_in_hex(&u16, sizeof(u16)); - cout << '\n'; - - uint32_t u32 = 0x42; - cout << "u32 bytes: "; - print_in_hex(&u32, sizeof(u32)); - cout << '\n'; - - - cout << "0x" << hex << static_cast(byte) << " hex: "; - print_in_hex(&byte, sizeof(byte)); - cout << "0x" << hex << static_cast(byte) << " bin: "; - print_in_binary(byte); + cout << "XOR (0x4d2 ^ 0x1234):\n"; + print_in_binary(&xorr, sizeof(xorr)); cout << "\n\n"; - cout << "Press any key for exit... "; cin.ignore(); return 0; }