Union

Union memiliki beberapa member yang bisa diberi tipe data berbeda-beda. Syntax penulisan union sama dengan struct. Bedanya ada pada cara penyimpanan datanya. Sebelum membahas cara beda union dan struct, kalian perlu memperhatikan syntaxnya.

union nama_union{
    tipe_data member_1;
    tipe_data member_2;
    //....
    tipe_data member_n;
} nama_variabel;

nama_union variabel;

Struct menyimpan setiap informasi membernya secara terpisah. Sebaliknya, union mencampur tempat penyimpanan data setiap membernya. Saat nilai satu member diubah, nilai member lain juga akan berubah.

Memori yang digunakan struct adalah total dari ukuran tipe data semua membernya. Ini berbeda dengan union yang memiliki ukuran memori sebesar ukuran tipe data terbesar yang dimiliki membernya.

#include <iostream>

using namespace std;

union data_siswa{
    unsigned long n1;
    unsigned short n2;
}angka;

int main(){
    cout << "n1: ";cin >> angka.n1;
    cin.ignore();
    cout << "n2 : ";cin >> angka.n2;
	
    cout << "n1 : " << angka.n1 << endl;
    cout << "n2 : " << angka.n2 << endl;
    return 0;
}
Contoh Program :
n1: 12345
n2 : 123
n1 : 123
n2 : 123

Kalau kalian mengubah tipe data union menjadi struct tanpa mengubah bagian program lainnya, maka program akan memberikan output yang berbeda saat diberi nilai yang sama dengan program sebelumnya. Kalian bisa coba mengubah programnya sehingga jadi seperti di bawah ini.

#include <iostream>

using namespace std;

struct data_siswa{
    unsigned long n1;
    unsigned short n2;
}angka;

int main(){
    cout << "n1: ";cin >> angka.n1;
    cin.ignore();
    cout << "n2 : ";cin >> angka.n2;
	
    cout << "n1 : " << angka.n1 << endl;
    cout << "n2 : " << angka.n2 << endl;
    return 0;
}
Contoh Program :
n1: 12345
n2 : 123
n1 : 12345
n2 : 123

Struct menyimpan nilai setiap membernya di tempat penyimpanan yang berbeda. Itu membuat nilai setiap membernya tidak saling mempengaruhi. 

Kalau kalian lihat contoh kode program union, kalian seharusnya bisa melihat bahwa nilai member pertama tidak sesuai dengan input yang diberikan. Itu karena nilai member pertama berubah saat member kedua diberi nilai. Seperti yang sudah dijelaskan sebelumnya, union menggunakan tempat penyimpanan yang sama untuk menyimpan nilai semua membernya.

Member union sebaiknya diberi tipe data yang berbeda-beda. Jika semua member diberi tipe data yang sama, maka nilai semua membernya akan sama setiap kali ada member yang diubah nilainya.

Bit Field

Bit Field adalah struct atau union yang dibatasi hak akses bit dari tiap membernya. Kalian bisa menentukan jumlah bit yang digunakan setiap membernya. Sintaks penulisan bit field untuk union adalah seperti di bawah ini.

union nama_bitfield{

    tipe_data member_1:jumlah_bit;

    tipe_data member_2:jumlah_bit;

    //....

    tipe_data member_n;

} nama_variabel;

nama_bitfield nama_variabel;

kalau kalian menggunakan struct, ganti saja "union" dengan struct.