diff --git a/lab04_task2.cpp b/lab04_task2.cpp
new file mode 100644
index 0000000..c406f2d
--- /dev/null
+++ b/lab04_task2.cpp
@@ -0,0 +1,77 @@
+#include <cstdint>
+#include <iostream>
+using namespace std;
+
+char nibble_to_hex(uint8_t i) {
+    static const char digits[] = "0123456789ABCDEF";
+    return digits[i];
+}
+
+void print_byte_hex(uint8_t byte) {
+    cout << nibble_to_hex(byte >> 4) << nibble_to_hex(byte & 0x0F);
+}
+
+void print_hex(uint16_t value) {
+    uint8_t* bytes = (uint8_t*)&value;
+    print_byte_hex(bytes[0]);
+    cout << " ";
+    print_byte_hex(bytes[1]);
+}
+
+void print_byte_binary(uint8_t byte) {
+    for (int i = 7; i >= 0; i--) {
+        cout << ((byte >> i) & 1);
+    }
+}
+
+void print_binary(uint16_t value) {
+    uint8_t* bytes = (uint8_t*)&value;
+    print_byte_binary(bytes[0]);
+    print_byte_binary(bytes[1]);
+}
+
+int main() {
+    uint16_t operand1, operand2;
+    char operation;
+
+    // ���� ������
+    cin >> operand1 >> operation >> operand2;
+
+    // ���������� ����������
+    uint16_t result;
+    switch (operation) {
+        case '&':
+            result = operand1 & operand2;
+        break;
+        case '|':
+            result = operand1 | operand2;
+        break;
+        case '^':
+            result = operand1 ^ operand2;
+        break;
+        default:
+            cout << "������: �������������� ������ ��������� &, | � ^" << endl;
+        return 1;
+    }
+
+    // ����� ��������� ���������
+    cout << operand1 << " " << operation << " " << operand2 << endl;
+
+    // ����� � ����������������� ����
+    print_hex(operand1);
+    cout << " " << operation << " ";
+    print_hex(operand2);
+    cout << " = ";
+    print_hex(result);
+    cout << endl;
+
+    // ����� � �������� ����
+    print_binary(operand1);
+    cout << " " << operation << endl;
+    print_binary(operand2);
+    cout << " =" << endl;
+    print_binary(result);
+    cout << endl;
+
+    return 0;
+}