[ HTML ] [ Java ] [ Bahasa C ]


Minggu, Mei 02, 2021

Operator Bitwise pada Bahasa C

Dalam bahasa C, semua operator yang terdapat dalam bahasa pemrograman tersebut adalah termasuk operator bitwise yang bekerja pada level satuan bit, berikut penjelasannya:

satu, Operator bitwise AND '&' pada bahasa C dan C++ akan mengambil dua jenis angka sebagai operand dan menerapkan logika AND pada setiap bit dari dua angka. Hasil dari operator AND adalah 1 hanya jika kedua bit adalah bernilai 1.

dua, Operator bitwise OR '|' pada bahasa C dan C++ akan mengambil dua jenis angka sebagai operand dan menerapkan logika OR pada setiap bit dari dua angka. Hasil dari operator OR adalah 1 jika salah satu dari dua bit adalah 1.

tiga, Operator bitwise XOR (exlusive or) '^' pada bahasa C dan C++ akan mengambil dua jenis angka sebagai operand dan menerapkan logika XOR pada setiap bit dari dua angka. Hasil dari operator XOR adalah 1 jika dua bit bernilai beda.

empat, Operator bitwise left shift '<<' pada bahasa C dan C++ akan mengambil dua jenis angka dan geser kiri dari operand pertama, dan operand kedua memutuskan angka mana dari lokasi yang akan digeser.

lima, Operator bitwise right shift '>>' pada bahasa C dan C++ akan mengambil dua jenis angka dan geser kanan dari operand pertama, dan operand kedua memutuskan angka mana dari lokasi yang akan digeser.

enam, Operator bitwise NOT '~' pada bahasa C dan C++ akan mengambil satu angka dan membalikkan nilai bit dari semua angka tersebut.

Contoh:

// Program bahasa C untuk

// mendemonstrasikan kegunaan

// dari operator bitwise

#include <stdio.h>

 

int main()

{

// a = 5(00000101) 

// b = 9(00001001)

unsigned char a = 5, b = 9;

 

// Hasilnya adalah 00000001

printf("a = %d, b = %d\n", a, b);

printf("a&b = %d\n", a & b);

 

// Hasilnya adalah 00001101

printf("a|b = %d\n", a | b);

 

// Hasilnya adalah 00001100

printf("a^b = %d\n", a ^ b);

 

// Hasilnya adalah 11111010

printf("~a = %d\n", a = ~a);

 

// Hasilnya adalah 00010010

printf("b<<1 = %d\n", b << 1);

 

// Hasilnya adalah 00000100

printf("b>>1 = %d\n", b >> 1);

 

return 0;

}

Output:
a = 5, b = 9
a&b = 1
a|b = 13
a^b = 12
~a = 250
b<<1 = 18
b>>1 = 4

Fakta menarik tentang operator bitwise
satu, Operator left shift dan right shift tidak bisa digunakan untuk nilai negatif. Jika setiap operand bernilai negatif, maka hasilnya adalah tidak terdefinisi. Contoh hasil dari ketua persamaan berikut -1<<1 dan 1<<-1 adalah tidak terdefinisi. Juga, jika angka bergeser lebih dari ukuran integer, maka behavior-nya adalah tidak terdefinisi. Contoh, 1 << 33 adalah tidak terdefinisi jika integer disimpan menggunakan 32bit.

dua, Operator bitwise XOR adalah operator yang paling berguna dari sudut pandang technical interview. Karena operator ini digunakan pada banyak permasalahan. Contoh sederhana "diberikan satu set angka di mana semua elemen terjadi beberapa kali, kecuali satu angka, temukan angka ganjil yang muncul dalam kejadian", permasalah tersebut akan lebih efisien penyelesaiannya jika menggunakan operator XOR untuk semua angka.

#include <stdio.h>

 

// Berfungsi untuk

// mengembalikan satu-satunya

// elemen yang muncul ganjil

int findOdd(int arr[], int n)

{

int res = 0;

int i;

for (i = 0; i < n; i++)

res ^= arr[i];

 

return res;

}

 

// Driver Method

int main(void)

{

int arr[] = { 12, 12, 14, 90, 14, 14, 14 };

int n = sizeof(arr) / sizeof(arr[0]);

printf("The odd occurring"

" element is %d ",

findOdd(arr, n));

return 0;

}

Output:
The odd occurring element is 90

Contoh lain untuk jenis permasalah yang bisa diselesaikan dengan lebih efisien jika menggunakan operator XOR.
satu, Menemukan angka hilang dari deret.
dua, Penukaran dua angka tanpa menggunakan variabel sementara.
tiga, Efisiensi memori dengan Double Linked List.
empat, Menemukan dua elemen tidak berurutan.
lima, Menemukan dua angka dengan kejadian ganjil dalam unsorted-array.
enam, Penambahan dua angka tanpa menggunakan operator aritmatika.
tujuh, Menukar bit dari angka yang diberikan.
delapan, Menghitung angka dari bit yang akan dibalik untuk konversi a ke b.
sembilan, Menemukan elemen yang hanya muncul sekali.
sepuluh, Mendeteksi jika dua integer memiliki tanda berlawanan.

tiga, Operator bitwise tidak seharusnya digunakan pada lokasi dari operator logika. Hasil dari operator logika adalah 0 atau 1 (true atau false), tetapi operator bitwise mengembalikan nilai integer. Juga, operator logika mempertimbangkan operand non-zero apapun seperti 1. Contoh, perhatikan program berikut ini, hasil dari & dan && adalah berbeda meskipun pada operand yang sama.

#include <stdio.h>

 

int main()

{

int x = 2, y = 5;

(x & y) ? printf("True ") : printf("False ");

(x && y) ? printf("True ") : printf("False ");

 

return 0;

}

Output:
False True

empat, Operator left-shift dan right-shift adalah senilai untuk perkalian dan pembagian oleh 2 secara berurutan. Seperti yang dijelaskan pada point satu, hanya dapat bekerja jika angka bernilai positif.

#include <stdio.h>

 

int main()

{

int x = 19;

printf("x << 1 = %d\n", x << 1);

printf("x >> 1 = %d\n", x >> 1);

 

return 0;

}

Output:
x << 1 = 38
x >> 1 = 9

lima, Operator & dapat digunakan untuk pemeriksaan cepat jika angka bernilai ganjil atau genap.
Nilai dari ekspresi (x & 1) hanya dapat bernilai non-zero jika x adalah angka ganjil, jika tidak maka nilai akan bernilai 0.

#include <stdio.h>

 

int main()

{

int x = 19;

(x & 1) ? printf("ganjil") : printf("genap");

 

return 0;

}

Output:
ganjil

enam, Operator ~ harus digunakan secara hati-hati. Hasil dari operator ~ pada nilai angka kecil dapat berupa angka besar jika hasilnya disimpan dalam variabel unsigned. Dan hasilnya juga dapat berupa angka negatif jika disimpan dalam variabel signed (diasumsikan angka negatif disimpan pada 2 komplemen dimana bit paling kiri adalan sign bit).

// Perhatikan bahwa keluaran

// dari program berikut ini

// bergantung pada kompilator

// yang digunakan

#include <stdio.h>

 

int main()

{

unsigned int x = 1;

printf("Hasil dari Signed"

" adalah %d \n", ~x);

printf("Hasil dari Unsigned"

" adalah %u \n", ~x);

 

return 0;

}

Output:
Hasil dari Signed adalah -2
Hasil dari Unsigned adalah 4294967294d

5 komentar:

  1. Apa yang dimaksud dengan operator bitwise dalam bahasa C?

    BalasHapus
    Balasan
    1. Operator bitwise adalah sekumpulan operator khusus yang disediakan oleh bahasa C, operator tersebut digunakan oleh bahasa C dalam pemrograman tingkat satuan bit. Operator bitwise digunakan untuk memanipulasi nilai bit dari ekspresi integer.

      Hapus
  2. Operator bitwise digunakan untuk mengubah nilai bit satuan dalam sebuah operan. Satu byte memori komputer jika dilihat sebagai satuan yang lebih kecil adalah terdiri dari 8 bit, dari satu 8 bit tersebut kemudian dapat digunakan sebagai penanda status benar dan salah dari 8 tanda berbeda, karena setiap bit dapat digunakan sebagai nilai boolean yang dapat menampung salah satu dari dua kemungkinan nilai (TRUE atau FALSE).

    BalasHapus
  3. Bagaimana operator logika AND dan OR bitwise bekerja pada bahasa C?

    BalasHapus
    Balasan
    1. Operator & (bitwise AND) pada bahasa C dan C++ bekerja dengan cara menggunakan dua angka sebagai nilai operan dan melakukan perhitungan dengan logika AND pada setiap bit dari dua nilai atau angka dari operan yang digunakan tersebut. Hasil dari logika AND adalah bernilai 1 atau TRUE jika kedua nilai bit tersebut adalah bernilai 1 atau TRUE.

      Sedangkan operator | (bitwise OR) pada bahasa C dan C++ bekerja dengan cara menggunakan dua nakg sebagai nilai operan dan melakukan perhitungan dengan logika OR jika SALAH SATU dari dua bit nilai operan tersebut bernilai 1 atau TRUE.

      Hapus

Respon komentar 7 x 24 jam, so please be patient :D