// Created by Professional on 10.12.2025. #include #include #include #include #include using namespace std; struct Student { char name[17]; // имя + '\0' uint16_t year; // год поступления (2 байта) float gpa; // средний балл unsigned gender : 1; // 1 бит: 0 — жен, 1 — муж unsigned courses; // количество курсов (обычное целое) struct Student* headman; // указатель на старосту }; char nibble_to_hex(uint8_t i){ assert(0x0 <= i && i <= 0xf); switch (i) { case 0x0: return '0'; case 0x1: return '1'; case 0x2: return '2'; case 0x3: return '3'; case 0x4: return '4'; case 0x5: return '5'; case 0x6: return '6'; case 0x7: return '7'; case 0x8: return '8'; case 0x9: return '9'; case 0xA: return 'A'; case 0xB: return 'B'; case 0xC: return 'C'; case 0xD: return 'D'; case 0xE: return 'E'; case 0xF: return 'F'; default: return '?'; } } void print_in_hex(uint8_t byte) { cout<< nibble_to_hex(byte >> 4)<<""<= 0; --bit) { printf("%d", (byte >> bit) & 1); } } void print_in_binary(const void* data, size_t size) { const uint8_t* bytes = (const uint8_t*)data; for (size_t i = 0; i < size; ++i) { print_in_binary(bytes[i]); // вывод по одному байту printf(" "); // пробел между байтами if ((i + 1) % 4 == 0) // перевод строки после 4 байт printf("\n"); } if (size % 4 != 0) printf("\n"); } int main() { struct Student group[3] = { { "Ivanov", 2023, 4.5f, 1, 10, NULL }, // [0] староста { "Petrova", 2023, 4.2f, 0, 8, &group[0] }, // [1] { "Sidorov", 2023, 3.9f, 1, 6, &group[0] } // [2] }; /* 1) Адрес и размер массива */ printf("group address = %p, sizeof(group) = %zu\n", (void*)group, sizeof(group)); /* 2) Адреса и размеры элементов массива */ for (int i = 0; i < 3; ++i) { printf("group[%d]: address = %p, sizeof = %zu\n", i, (void*)&group[i], sizeof group[i]); } /* 3) Информация по полям (пример для group[1], не староста) */ struct Student *s = &group[1]; printf("\nField name: addr=%p, offset=%zu, size=%zu\n", (void*)&s->name, offsetof(struct Student, name), sizeof s->name); printf("Field year: addr=%p, offset=%zu, size=%zu\n", (void*)&s->year, offsetof(struct Student, year), sizeof s->year); printf("Field gpa: addr=%p, offset=%zu, size=%zu\n", (void*)&s->gpa, offsetof(struct Student, gpa), sizeof s->gpa); printf("Field courses: addr=%p, offset=%zu, size=%zu\n", (void*)&s->courses, offsetof(struct Student, courses), sizeof s->courses); printf("Field headman: addr=%p, offset=%zu, size=%zu\n", (void*)&s->headman, offsetof(struct Student, headman), sizeof s->headman); printf("Field name hex:\n"); print_in_hex(&group[1], sizeof group[1]); printf("\nField year hex: "); print_in_hex(&s->year, sizeof s->year); printf("\nField gpa hex: "); print_in_hex(&s->gpa, sizeof s->gpa); printf("Field name bin:\n"); print_in_binary(&group[1], sizeof group[1]); printf("Field year bin: "); print_in_binary(&s->year, sizeof s->year); printf("Field gpa bin: "); print_in_binary(&s->gpa, sizeof s->gpa); cout<> a; printf("Enter the operator (&, | or ^):"); cin >> op; printf("Enter the second operand (0..65535): "); cin >> b; switch (op) { case '&': result = a & b; break; case '|': result = a | b; break; case '^': result = a ^ b; break; default: cout << "Unknown operator: " << op << endl; return 1; } printf("\nResult of the operation %hu %c %hu:\n", a, op, b); printf("Hex: "); print_in_hex(&a, sizeof(a)); printf(" %c ", op); print_in_hex(&b, sizeof(b)); printf(" = "); print_in_hex(&result, sizeof(result)); printf("\n"); printf("Bin: "); print_in_binary(&a, sizeof(a)); printf(" %c ", op); print_in_binary(&b, sizeof(b)); printf(" = "); print_in_binary(&result, sizeof(result)); printf("\n"); return 0; } //test23234