Rabu, 24 Oktober 2012

Union, Enum dan Bit-Field :D

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