2. Union
Sama seperti struct, union juga merupakan tipe data yang dibangkitkan, dimana
anggota-anggotanya menggunakan secara bersama-sama ruang penyimpanan memori
yang sama, berbeda dengan struktur yang masing-masing variabel menempati lokasi
memori yang berbeda. Jumlah bytes yang digunakan untuk menyimpan union adalah
sedikitnya cukup untuk menyimpan data terbesar yang ditangani. Oleh karena itu, tipe
union ini umumnya digunakan untuk menangani satu, dua, atau tiga variabel dengan tipe
yang mirip. Sebagai contoh:
union nilaiUjian {
int uts, uas;
float akhir;
}
Inisialisasi, deklarasi, dan pengolahan terhadap tipe union ini sama dengan struct yang
telah dijelaskan pada bagian sebelumnya.
3. Struktur Enum
Program C menyediakan tipe data yang dapat didefinisikan oleh pemrogram yang disebut
dengan enumerasi. Enumerasi, didefinisikan dengan menggunakan kata kunci enum,
adalah sekumpulan konstanta integer yang direpresentasikan dengan identikasi tertentu.
Nilai dalam enum dimulai dari 0, dapat diubah dengan nilai lainnya, dan menaik dengan
penambahan 1 untuk nilai selanjutnya. Sebagai contoh, enumerasi berikut:
enum bulan {JAN, PEB, MAR, APR, MEI, JUN, JUL, AGU, SEP, OKT, NOP, DES};
akan menciptakan tipe baru yaitu enum bulan, yang secara otomatis menunjukkan deret
nilai 0 untuk JAN hingga 11 untuk DES. Nilai bulan ini dapat diubah menjadi 1 hingga
12 dengan cara sebagai berikut:
enum bulan {JAN = 1, PEB, MAR, APR, MEI, JUN, JUL, AGU, SEP, OKT, NOP, DES};
Program berikut menyajikan contoh penggunaan tipe enumerasi. Silakan ditelaah dan diduga keluarannya.
#include
enum bulan {JAN = 1, PEB, MAR, APR, MEI, JUN, JUL, AGU, SEP, OKT, NOP, DES};
main() {
enum bulan Bulan;
char *namaBulan[] = {"", "Januari", "Pebruari", "Maret", "April", "Mei", "Juni", "Juli","Agustus", "September", "Oktober", "Nopember", "Desember" };
for ( Bulan = JAN ; Bulan <= DEC ; Bulan++ )
printf( "%2d%11s\n", Bulan, namaBulan[Bulan] );
return 0;
}
4. Bit Field
Dalam pemrograman tingkat rendah, seringkali dibutuhkan akses sebuah struktur informasi berupa bit.
Bitfield merepresentasi hal ini. Pengaksesan elemen sama dengan pengaksesan elemen struktur.
it field berlaku seperti integer (dengan nilai terbatas), dan dapat dipakai dalam ekspresi aritmatika.
Digunakan untuk menyimpan beberapa objek dalam 1 byte/word, jika :tempat penyimpanan sangat
terbatas akan dilakukan manipulasi pada register perangkat keras
Contoh: return value status perangkat keras dari bios call/ DOS call pada IBM PC
Deklarasi bit field pada struktur:
struct [ struktur>] {
/* definisi komponen struktur */
: ;
: ;
:
: ;
} [ variabel struktur>];
Harga total jumlah bit maksimum tergantung implementasi (misalnya, untuk Turbo C jumlah bit total
maksimum 16).
- Contoh:
struct bagi_dua {
unsigned int BagianKu: 4;
unsigned int BagianMu: 4;
} CounterKita;
/* CounterKita.BagianKu mempunyai range 0..63,
CounterKita.BagianMu mempunyai range 0..63,
ukuran CounterKita 1 byte (8 bit) */
Contoh shift status (return value int 16h fungsi 2):
struct keyboard_flags {
unsigned int rshift : 1; /* bit 0 (LSB) */
unsigned int lshift : 1;
unsigned int ctrl : 1;
unsigned int alt : 1;
unsigned int scroll : 1;
unsigned int num : 1;
unsigned int caps : 1;
unsigned int insert : 1; /* bit 7 (MSB) */
} keystatus;
Contoh akses:
if (keystatus.ctrl) {
/* tombol Ctrl ditekan, lakukan .... */
keystatus.ctrl = 0;
:
}
Tidak ada komentar:
Posting Komentar