union bytes{
double d;
unsigned char c [sizeof (double)];
};
int main ()
{
bytes ob={199.5};
for (int j=sizeof(double)-1; j>=0; j--)
{
cout << "byte " <<j << ": ";
for (int i=128; i; i>>=1) //проход по битам
if (i & ob.c[j]) //выделение бита
cout << "1";
else cout << "0";
cout << "\n";
}
_getch();
return 0;
}
Например, внутреннее представление числа -256.5: С0 70 08 00 00 00 00 00 16
в памяти значение хранится в виде: 00 00 00 00 00 08 70 С016
Объяснение, как получено это значение, дано в разделе «Внутреннее представление вещественных чисел» лекции 8.
Использование перечислимого типа для обращения к полям объединения[1]*
int main()
{ enum paytype {CARD, CHECK}; //две формы оплаты: значения 0 и 1
paytype ptype; //определение переменной перечисляемого типа
union
{char card[25];
long check;
} info;
Возможное присваивание значения объединению:
ptype = CARD; //переменная-флаг получает значение CARD (0)
strcpy (info.card, "12345"); //объединение получает свое значение через поле card
или
ptype = paytype(1); //переменная–флаг получает значение CHECK (1)
info.check= 105l; //объединение получает свое значение через поле check
Вывод значения переменной на экран:
switch (ptype) {
case CARD: cout <<"card:" << info.card<< endl; break;
case CHECK: cout <<"check:" << info.check<< endl; break;
}
_getch();
return 0;
}
Реализуем пример по-другому.
Создадим структуру, включающую объединение и поле перечислимого типа, характеризующее форму оплаты:
int main()
{
enum paytype {CARD, CHECK}; //две формы оплаты
struct{
paytype ptype; //поле-флаг включено в состав структуры
union
{char card[25];
long check;
} info;
} str;
Возможное присваивание значения объединению:
str.ptype = paytype(0); //заполняем поле-флаг объединения, как элемента структуры
strcpy(str.info.card, "12345");//объединение, как элемент структуры,
//получает свое значение через поле card
или
str.ptype = paytype(1); //заполняем поле-флаг объединения, как элемента структуры
str.info.check= 105l; //объединение, как элемент структуры,
//получает свое значение через поле check
Вывод на экран значения объединения как элемента переменной-структуры:
switch (str.ptype) {
case CARD: cout <<"card:" << str.info.card<< endl; break;
case CHECK: cout <<"check:" << str.info.check<< endl; break;
}
_getch();
return 0;
}