Bitwise Operator Pada Pemrograman Arduino

Salah satu fitur penting dalam pemprograman arduino adalah kemampuan manipulasi data pada tingkat bit, dengan begitu, kita bisa secara langsung menulis pada register hardware yang terhubung pada arduino, melakukan komunikasi serial menggunakan protokol I2C atau SPI, serta juga bisa mengambil data mentah dari sensor dan mengolahnya menjadi informasi yang kita perlukan.  

Untuk melakukan manipulasi data pada tingkat bit, kita perlu mempelajari tentang bitwise operator. Sekarang langsung saja kita bahas tentang operator ini :

Bitwise AND (&) 

Berfungsi untuk melakukan operasi bilangan biner antara dua nilai integer, dimana setiap bit dari dua nilai tersebut akan dibandingkan dan hasilnya mengikuti syarat kondisi logika AND. Pada logika AND, jika kedua bit bernilai 1 maka outputnya bernilai 1, selain itu hasilnya akan nol. 

Ayo kita coba langsung ke program, ketik program di bawah ini

				
					void setup() {
Serial.begin (9600);
int a = 77 ;  
int b = 121;    
int c = a & b;  
Serial.print ("Bilangan biner variabel c = ");
Serial.println (c, BIN);
Serial.print ("Bilangan desimal variabel c = ");
Serial.println (c);
}
void loop() {
//nocode
}

				
			

Upload program dan buka serial monitor, hasilnya sama dengan gambar dibawah ini

Terlihat pada serial monitor bahwa hasil operasi bitwise and antara variabel a dan b adalah 73. Kenapa bisa hasilnya 73 ? coba lihat gambar dibawah

bit ke-0 variabel a dibandingkan dengan bit ke-0 variabel b, karena keduanya bernilai 1 maka, outputnya bernilai 1 (sesuai dengan syarat logika AND). Begitu seterusnya sampai dengan bit ke-7. Sehingga didapat output dari operasi tersebut adalah 01001001, bilangan biner itu jika dikonversi ke desimal adalah 73.

bitwise OR (|)

Berfungsi untuk melakukan operasi bilangan biner antara dua nilai integer, dimana setiap bit dari dua nilai tersebut akan dibandingkan dan hasilnya mengikuti syarat kondisi logika OR. Pada logika OR, jika salah satu bit atau keduanya bernilai 1, maka outputnya adalah 1, selain itu outputnya 0

Kita langsung ke contoh program

				
					void setup() {
Serial.begin (9600);
int a = 77 ;  
int b = 121;    
int c = a | b;  
Serial.print ("Bilangan biner variabel c = ");
Serial.println (c, BIN);
Serial.print ("Bilangan desimal variabel c = ");
Serial.println (c);
}
void loop() {
//nocode
}

				
			

upload program dan buka serial monitor, hasilnya sama dengan gambar dibawah ini

Terlihat pada serial monitor bahwa hasil operasi bitwise or antara variabel a dan b adalah 125. 

bit ke-0 variabel a dibandingkan dengan bit ke-0 variabel b, karena keduanya bernilai 1 maka, outputnya bernilai 1 (sesuai dengan syarat logika OR). Begitu seterusnya sampai dengan bit ke-7. Sehingga didapat output dari operasi tersebut adalah 01111101, bilangan biner itu jika dikonversi ke desimal adalah 125.

bitwise XOR (^)

Berfungsi untuk melakukan operasi bilangan biner antara dua nilai integer, dimana setiap bit dari dua nilai tersebut akan dibandingkan dan hasilnya mengikuti syarat kondisi logika XOR. Pada logika XOR, output akan bernilai 1 jika inputnya berbeda nilai.

				
					// contoh program

void setup() {
Serial.begin (9600);
int a = 77 ;  
int b = 121;    
int c = a ^ b;  
Serial.print ("Bilangan biner variabel c = ");
Serial.println (c, BIN);
Serial.print ("Bilangan desimal variabel c = ");
Serial.println (c);
}
void loop() {
//nocode
}

				
			

upload program dan buka serial monitor, hasilnya sama dengan gambar dibawah ini

Terlihat pada serial monitor bahwa hasil operasi bitwise xor antara variabel a dan b adalah 52. 

bit ke-0 variabel a dibandingkan dengan bit ke-0 variabel b, karena keduanya bernilai 1 maka, outputnya bernilai 0 (sesuai dengan syarat logika XOR). Begitu seterusnya sampai dengan bit ke-7. Sehingga didapat output dari operasi tersebut adalah 00110100, bilangan biner itu jika dikonversi ke desimal adalah 52.

bitwise NOT (~)

Tidak seperti bitwise AND dan OR, bitwise NOT hanya diterapkan pada satu operand saja. Ketika suatu nilai memakai bitwise NOT maka setiap bit-nya akan dibalik kondisi (bit 0 akan menjadi bit 1 dan sebaliknya).

				
					Contoh :
int a = 103; 		//bilangan binernya : 0000000001100111
int b = ~a;		//bilangan binernya : 1111111110011000 = -104

				
			

bitwise NOT bisa menyebabkan suatu nilai integer menjadi negatif, itu karena bit paling kiri dari data integer nilainya dibalik. bit ini disebut sign bit, yaitu bit yang menentukan nilai negatif atau positif. Sign bit 0 membuat variabel bertanda positif, sehingga jika sign bit berubah menjadi 1, nilai variabel akan bertanda negatif.

Bitshift kanan (>>)

berfungsi untuk menggeser seluruh bit ke kanan sebesar nilai yang diinginkan.

				
					Syntax 	: 
X  >>  n;

				
			

X adalah sebuah nilai yang bit nya akan digeser, tipe data yang diizinkan adalah byte, long, int. sedangkan n adalah jumlah pergeseran bit yang dilakukan. Output dari operasi ini adalah sebuah nilai hasil pergeseran bit nilai X yang digeser ke kanan sebesar n. Contoh, nilai X adalah 5, bilangan binernya 0b00000101, kita melakukan operasi X >> 1, ini menyebabkan bilangan biner nilai X akan bergeser 1 ke kanan, sehingga hasilnya adalah 0b00000010 bilangan desimalnya adalah 2. 

Bitshift kiri (<<)

Berfungsi untuk menggeser seluruh bit ke kiri sebesar nilai yang
diinginkan. 

				
					Syntax 	: 
X  <<  n;

				
			

X adalah sebuah nilai yang bit nya akan digeser, tipe data yang diizinkan adalah byte, long, int. sedangkan n adalah jumlah pergeseran bit yang dilakukan. Output dari operasi ini adalah sebuah nilai hasil pergeseran bit nilai X yang digeser ke kiri sebesar n. Contoh, nilai X adalah 5, bilangan binernya 0b00000101, kita melakukan operasi X << 2, ini menyebabkan bilangan biner nilai X akan bergeser 1 ke kiri, sehingga hasilnya adalah 0b00010100 bilangan desimalnya adalah 20. 

Sekarang ayo kita coba menerapkannya pada program

				
					int X;
int Y;
int Z;

void setup() {  
Serial.begin(9600);
X = 5;
Y = X >> 1;
Z = X << 2;
Serial.print ("Bilangan biner variabel X = ");
Serial.println (X, BIN);
Serial.print ("Bilangan desimal variabel X = ");
Serial.println (X);

Serial.print ("Bilangan biner variabel Y = ");
Serial.println (Y, BIN);
Serial.print ("Bilangan desimal variabel c = ");
Serial.println (Y);

Serial.print ("Bilangan biner variabel Z = ");
Serial.println (Z, BIN);
Serial.print ("Bilangan desimal variabel Z = ");
Serial.println (Z);
}
void loop() {
//nocode
}

				
			

upload program dan buka serial monitor, hasilnya sama dengan gambar dibawah ini

Sekarang ayo kita bedah hasilnya, kenapa nilai variabel X ketika di shift ke kanan (>>) hasilnya jadi 2 dan ketika di shift ke kiri (<<) hasilnya menjadi 20 ?. 

Desimal 5 (Variabel X) bilangan biner nya 0101, ketika di shift ke kanan (>>) sekali, Least Significant Bit (LSB) akan dihilangkan kemudian ditambahkan 0 didepan Most Significant Bit dan menggeser bit yang lainnya ke kanan. 

0101 >> 0010

Sedangkan di shift ke kiri (<<) 2 kali, bilangan biner akan ditambahkan 0 dibelakang Least Significcant Bit (LSB) dan menggeser semua bit nya ke kiri.

0101 << 10100

Satu pemikiran pada “Bitwise Operator Pada Pemrograman Arduino”

Tinggalkan komentar