Anda di halaman 1dari 8

1.

Bitfield

Suatu bit atau beberapa bit dalam sebuah data berukuran satu byte atau dua byte dapat diakses
dengan mudah melalui bitfield. Dengan cara ini, suatu bit atau beberapa bit dapat diakses tanpa
melibatkan operator pemanipulasi bit (seperti &, |). Selain itu, satu atau dua byte memori dapat
dipakai untuk menyimpan sejumlah informasi.
Sebagai contoh, untuk memperoleh informasi masing-masing bit dari suatu data satu byte,
penulisan medan bit berupa

struct info_byte
{ unsigned bitO:1;
unsigned bit1:1;
unsigned bit2:1;
unsigned bit3:1;
unsigned bit4:1;
unsigned bit5:1;
unsigned bit6:1;
unsigned bit7:1;
};

Jika disajikan dalam bentuk gambar, gambaran suatu struktur yang memiliki tipe seperti di atas
adalah sebagai berikut :

7 6 5 4 3 2 1 0 bit

b b b b b b b b
i i i i i i i i
t t t t t t t t
7 6 5 4 3 2 1 0

Gambar 10.2 Susunan bit dari memori sebuah data bertipe info_byte
Pada pendefinisian struktur info_byte di atas,

• Nilai 1 setelah tanda titik-dua (:) menyatakan panjang dari bitfield

• unsigned menyatakan bahwa bitfield dinyatakan dalam keadaan tak-bertanda (untuk contoh
berikutnya, nantinya setiap bitfield memiliki kemungkinan nilai berkisar 1 atau 0).
nama tipe struktur yang terdiri atas sejumlah bitfield
struct info_byte
{ unsigned bitO:1;
unsigned bit1:1;
unsigned bit2:1;
unsigned bit3:1;
unsigned bit4:1;
unsigned bit5:1;
unsigned bit6:1;
unsigned bit7:1;
};
panjang/jumlah bit
nama variabel bitfield

Catatan : sebuah variabel bitfield haruslah dideklarasikan berupa salah satu di antara
int,unsigned dan signed
#include <iostream>
#include <conio.h>
using namespace std;

//deklarasi bit field


struct bit_data {
unsigned b0: 1;
unsigned b1: 1;
unsigned b2: 1;
unsigned b3: 1;
unsigned b4: 1;
unsigned b5: 1;
unsigned b6: 1;
unsigned b7: 1;
};

int main() {
//deklarasi union
union ubyte {
unsigned char byte;
bit_data bit;
};

ubyte ascii;
int nilai;

cout << "Contoh Penggunaan Bit-field" << endl;


cout << "---------------------------" << endl;
cout << "Masukkan ascii antara 0 s/d 255 : ";
cin >> nilai;
ascii.byte = nilai;
cout << "\n7 6 5 4 3 2 1 0 << Posisi bit" << endl;
cout << ascii.bit.b7 << " " << ascii.bit.b6 << " " <<
ascii.bit.b5 << " " << ascii.bit.b4 << " " <<
ascii.bit.b3 << " " << ascii.bit.b2 << " " <<
ascii.bit.b1 << " " << ascii.bit.b0 << " " << endl;

_getche();
return 0;
}
Pada program di atas menggunakan header file #include <iostream> karena program akan
menggunakan fungsi seperti cout dan cin. Header file #include <conio.h> untuk memanggil
perintah getch . Lalu mendeklarasikan fungsi utama menggunakan int main(). Selanjutnya
diperlukan penambahan using namespace std; agar identifier dapat terdeteksi. Ketika program
dijalankan user memasukkan ascii antara 0 s/d 255 . Jika memilih 255 , berarti ascii.byte = 255.
Maka hal itu memberikan efek elemen byte juga akan bernilai sama dengan nilai yang diinput,
sebab byte dan nilai yang diinput berbagi data pada memori yang sama. Namun, walaupun
adanya sifat demikian, pernyataan :
ascii.byte = 255;
akan dianggap salah (saat kompilasi), sebab suatu variabel struktur yang mengandung elemen
bitfield memang tidak diijinkan untuk diberi nilai secara langsung. Oleh karena itu biasa
dibentuk didalam union. Pengaksesan nilai dapat dilakukan melalui variabel bitfield, misalnya :

printf("%d", ascii.byte.bit7);

untuk mengambil nilai dari bitfield bit 7. Contoh lain

ascii.byte.bit7 = O;

untuk mengubah bit7 agar bernilai 0.


2. Typedef
Untuk kepentingan memperjelas dokumentasi program C, user bisa menamakan
suatu tipe data dengan pengenal (identifier) yang lebih memberi arti atau mudah
diingat. Caranya adalah dengan memakai typedef. Sebagai contoh pengenal BYTE
dapat digunakan untuk menyatakan unsigned char.
Bentuk umum pernamaan suatu tipe data menggunakan typedef :

typedef tipe_data nama_baru;

Contoh :

typedef unsigned char


BYTE; typedef char
karakter;

karakter a;

Contoh tsb menyatakan bahwa BYTE identik dengan unsigned char. Sesudah
pendefinisian tersebut, BYTE dapat digunakan untuk mendeklarasikan variabel atau
jenis parameter fungsi, bahkan juga keluaran fungsi. Misalnya :

BYTE kode;

untuk mendeklarasikan variabel kode agar bertipe BYTE (atau unsigned char) .
Contoh lain :

BYTE beri_nilai_awal(void);

Menyatakan bahwa keluaran fungsi beri_nilai _awal() bertipe BYTE.


#include <iostream>

using namespace std;

int main() {
//typedef adalah memberikan alias untuk tipedata

typedef int nilai1 ;


typedef int nilai2 [2];
nilai1 a = 99;
nilai2 b = {55, 87};

cout << "nilai a: " << a << endl;


cout << "nilai b: " << b[0] << " dan " << b[1] << endl;
cin.get();
return 0;

}
Pada program di atas menggunakan header file #include <iostream> karena program akan
menggunakan fungsi seperti cout dan cin. Lalu mendeklarasikan fungsi utama menggunakan int
main().Selanjutnya diperlukan penambahan using namespace std; agar identifier dapat
terdeteksi. Typedef adalah memberikan alias pada program data. Pada program tersebut
menggunakan typedef int nilai1 ; dan typedef int nilai2 [2]; . typedef int nilai1 kita bisa
mengubah int nilai1 tersebut menjadi a dan untuk typedef int nilai2 kita juga dapat mengubah int
nilai2 menjadi b .

Anda mungkin juga menyukai