C++ union объединения
Объединения состоят из нескольких переменных, который находятся в одной и той же области памяти, определяемую по самому большому объему типа.
union utype {
short int i;
char ch;
} u_var;
В переменной объединения u_var переменная i и ch разделяют одну область памяти, только i занимает 2 байта, а символьная ch 1 байт.
Пример программы, которая переставляет два байта, которые состоявляют короткое целочисленное значение.
#include <iostream>
using namespace std;
void disp_binary (unsigned u);
int main ()
{
union test {
short int i;
char ch[2];
} x;
x.i = 15; // bin: 0000 1111
disp_binary (x.ch[1]);cout << ' '; disp_binary (x.ch[0]);
char t;
t = x.ch[0];
x.ch[0] = x.ch[1];
x.ch[1] = t;
cout << '\n';
disp_binary (x.ch[1]);cout << ' '; disp_binary (x.ch[0]);
return 0;
}
void disp_binary (unsigned u){
register int t;
for (t=128; t>0; t=t/2){
if (u & t) cout << "1"; else cout << "0";
}
}
Результат выполнения программы:
00000000 00001111
00001111 00000000
Мы присваиваем целочисленной переменной i число 15.
Переставляем два байта, составяющие это значение путем обмена двух символов ch[0] ch[1]
В резульате старший и младший байты целочисленной переменной тоже меняются местами.
Это потому что эти две переменных разделяют одну и ту же область памяти.
Оставить свой ответ: