Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- using namespace std;
- ////////////////////////////////
- struct DeviceSettings // Пример 1: Настройки устройства (флаги)
- {
- unsigned int powerOn : 1; // 1 бит (0/ 1)
- unsigned int mode : 2; // 2 бита (0- 3)
- unsigned int volume : 4; // 4 бита (0-15)
- unsigned int brightness : 3; // 3 бита (0- 7)
- unsigned int reserved : 6; // не используется
- };
- /////////////////////////////////
- struct CompactDate // Пример 2: Дата в компактном виде
- {
- unsigned int day : 5; // 1- 31 (5 бит)
- unsigned int month : 4; // 1- 12 (4 бита)
- unsigned int year : 7; // 0-127 (от 2000 года)
- };
- ////////////////////////////////////////////////////
- int main()
- {
- setlocale(LC_ALL, "rus");
- cout << "=== БИТОВЫЕ ПОЛЯ В C++ ===\n\n";
- DeviceSettings settings; // Пример 1: Настройки устройства
- settings.powerOn = 1; // включено
- settings.mode = 2; // режим 2
- settings.volume = 10; // громкость 10
- settings.brightness = 5; // яркость 5
- cout << "Пример 1: Настройки устройства\n";
- cout << "Питание: " << settings.powerOn << "\n";
- cout << "Режим: " << settings.mode << "\n";
- cout << "Громкость: " << settings.volume << "\n";
- cout << "Яркость: " << settings.brightness << "\n";
- cout << "Размер структуры: " << sizeof(DeviceSettings) << " байт\n\n";
- CompactDate today; // Пример 2: Компактная дата
- today.day = 15;
- today.month = 5; // май
- today.year = 24; // 2024 год
- cout << "Пример 2: Компактная дата\n";
- cout << "Дата: " << today.day << "." << today.month << ".20" << today.year << "\n";
- cout << "Размер структуры: " << sizeof(CompactDate) << " байт\n\n";
- struct SmallCounter // Пример 3: Демонстрация переполнения
- {
- unsigned int value : 3; // только 0-7
- };
- SmallCounter counter;
- counter.value = 5;
- cout << "Пример 3: Счетчик (3 бита)\n";
- cout << "Значение 5: " << counter.value << "\n";
- counter.value = 10; // переполнение! 10 не помещается в 3 бита
- cout << "Переполнение 10 -> " << counter.value
- << " (только младшие 3 бита)\n\n";
- cout << "Пример 4: Побайтовый вывод\n"; // Прямой доступ к памяти
- unsigned char* bytes = reinterpret_cast<unsigned char*>(&settings);
- cout << "Байте структуры DeviceSettings: ";
- for(size_t i = 0; i < sizeof(DeviceSettings); ++i)
- {
- cout << hex << setw(2) << setfill('0') << (int)bytes[i] << " ";
- }
- cout << dec << "\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment