Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

уточнение по Объеденениям - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Сколько кактусов девочка не успела побрить? http://www.cyberforum.ru/cpp-beginners/thread653793.html
Мама развела оранжерею кактусов, некоторые из них были колючие, а некоторые - нет. Маленькая дочь Алина решила, что иглы на кактусах - это слишком вызывающе, и поэтому тщательно побрила их бритвой....
C++ Считывание строки из файла Пишу что-то типа простой авторизации на c++, нужно взять из файла определенную строку ( там пароли хранятся ) и сравнить с введенной. Как правильно и проще всего взять определенную строку из файла? http://www.cyberforum.ru/cpp-beginners/thread653788.html
C++ Как сделать задержку?
Почему после запуска программа сразу же закрывается? #include <iostream> #include <locale.h> #include <string> #include <conio.h> using namespace std;
C++ Задача: конвертация из одной системы счисления в другую
Описание Имеются 2 цифры в разных системах счисления, цель задачи найти, в каких системах счисления 2 цифры равны. Например, 12 и 5, в десятичной системе счисления они не равны, но 12 в 3-чной...
C++ friend function http://www.cyberforum.ru/cpp-beginners/thread653735.html
Помогите плз разобраться: Когда я делаю инкремент "х" через закрытые функции класса - все работает нормально, а когда через функцию-друга, то он просто не увеличивает. =( header-file #ifndef...
C++ Массивы подсчёт max и min от rand До меня никак не доходит всё что ниже строчки min_value = list(зачем присваем именно первый элемент массива, зачем делаем вот это:if(min_value > list) min_value = list; ); Объясните мне пожалуйста... подробнее

Показать сообщение отдельно
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
18.09.2012, 12:49
Вы видать не до конца поняли структуру объединений.
Предположим, мы объявили такое объединение:
C++
1
2
3
4
union myUnion {
   unsigned int a;            //предположим, что int на используемой платформе 4 байта
   unsigned short int b;   //предположим, что short int на используемой платформе 2 байта
};
Объекты данного объединения будут иметь одно поле размером 4 байта.
Попробуем теперь создать объект данного объединения и присвоим полю с именем a значение 32768.
C++
1
2
3
4
5
myUnion obj;
 
obj.a = 32768;
 
std::cout << obj.a << ' ' << obj.b << std::endl; // тут у нас выведется 32768 32768
В данном случае поле будет выглядеть в двоичном представлении так:
0000 0000 0000 0000 1000 0000 0000 0000

Теперь присвоим полю с именем a значение:

C++
1
2
3
obj.a = 65536;
 
std::cout << obj.a << ' ' << obj.b << std::endl; // тут у нас выведется 65536 0
В данном случае поле будет выглядеть в двоичном представлении так:
0000 0000 0000 0001 0000 0000 0000 0000

Ну а теперь присвоим полю с именем a значение 98304:
C++
1
2
3
obj.a = 65536;
 
std::cout << obj.a << ' ' << obj.b << std::endl; // тут у нас выведется 98304 32768
В данном случае поле будет выглядеть в двоичном представлении так:
0000 0000 0000 0001 1000 0000 0000 0000

Теперь объяснение: размер поля объектов объединений равен максимальному размеру из объявленных в нем типов, и все объекты его разделяют. Для представленного мной объединения в качестве примера, получается вот такая схемка.
Код
                     __________________
                    |unsigned short int|
0000 0000 0000 0001 1000 0000 0000 0000
|______________________________________|
            unsigned int
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru