Senin, November 25, 2019

Operator Bitwise Bahasa C dan C++

Dalam bahasa C, keenam operator pada gambar 1 adalah termasuk operator bitwise yang bekerja pada level satuan bit.

operator bitwise pada bahasa c
Gambar 1 operator bitwise pada bahasa C

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:
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.

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.

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.

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.

Output:
Odd

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)

Output:
Signed Result -2
Unsigned Result 4294967294d






Related Posts

Operator Bitwise Bahasa C dan C++
Oleh

"semoga yang memberikan komentar diberikan berkah kebaikan dari Allah, dijauhkan dari kejahatan, dan diberikan pahala ilmu dan amal jariyah dari sepenggal kata yang ia tinggalkan amiin :) "