Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

175 строки
5.3 KiB
C++

// Created by Professional on 10.12.2025.
#include <cstdio>
#include <cstdint>
#include <iostream>
#include <cstddef>
#include <cassert>
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)<<""<<nibble_to_hex(byte & 0x0F);
}
void print_in_hex(const void* data, size_t size) {
const uint8_t* bytes = (const uint8_t*)data;
for (size_t i = 0; i < size; ++i) {
print_in_hex(bytes[i]); // байт в шестнадцатеричном виде
if ((i + 1) % 16 == 0) {
cout << '\n';
}
else {
cout << ' ';
}
}
}
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) {
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<<endl;
uint16_t a, b, result;
char op;
printf("Enter the first operand (0..65535): ");
cin >> 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