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]

В резульате старший и младший байты целочисленной переменной тоже меняются местами.

Это потому что эти две переменных разделяют одну и ту же область памяти.



Оставить свой ответ:

Имя:*
E-Mail:
Вопрос:
Skolko buдет пять пдюс сeмь?
Ответ:*
QQpedia21.ru - cамые интересные вопросы