Operator Bitwise di C

Helo di sini, para penyihir kod masa depan! Hari ini, kita akan melakukan perjalanan yang menarik ke dunia operator bitwise di C. Jangan khawatir jika kamu baru mengenal pemrograman; saya akan menjadi pemandu kamu yang bersahabat, menjelaskan semuanya langkah demi langkah. Jadi, pakailah topi pembelajaran kamu, dan mari kita melompat masuk!

C - Bitwise Operators

Apa itu Operator Bitwise?

Sebelum kita mula, mari kita faham apa itu operator bitwise. Bayangkan kamu memiliki sekumpulan saklar lampu. Operator bitwise adalah seperti alat khusus yang membolehkan kamu mengawal saklar ini dengan cara yang menarik - menghidupkannya atau mematikannya, atau bahkan menukar status mereka. Di dunia komputer, "saklar" ini sebenarnya adalah bit (0 dan 1) yang membentuk data kita.

Sekarang, mari kita eksplor setiap operator bitwise satu per satu.

Operator AND Bitwise (&) di C

Operator AND bitwise adalah seperti rakannya yang picky yang hanya akan mengatakan "ya" jika kedua input setuju. Ia membandingkan setiap bit dari dua nombor dan hanya mengembalikan 1 jika kedua bit adalah 1. Jika tidak, ia mengembalikan 0.

Mari lihat contoh:

#include <stdio.h>

int main() {
unsigned int a = 60;  // 60 = 0011 1100 dalam binari
unsigned int b = 13;  // 13 = 0000 1101 dalam binari

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

return 0;
}

Output:

a & b = 12

Apa yang terjadi di sini? Mari kita pecahkan:

0011 1100  (60 dalam binari)
& 0000 1101  (13 dalam binari)
----------
0000 1100  (12 dalam desimal)

Lihat bagaimana ia hanya menyimpan angka 1 di mana kedua nombor memiliki 1? Itulah keajaiban operator AND bitwise!

Operator OR (|) Bitwise

Operator OR bitwise adalah seperti rakannya yang derma yang mengatakan "ya" jika salah satu input setuju. Ia mengembalikan 1 jika setidaknya satu bit yang sesuai adalah 1.

Inilah contohnya:

#include <stdio.h>

int main() {
unsigned int a = 60;  // 60 = 0011 1100 dalam binari
unsigned int b = 13;  // 13 = 0000 1101 dalam binari

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

return 0;
}

Output:

a | b = 61

Mari kita pecahkan:

0011 1100  (60 dalam binari)
| 0000 1101  (13 dalam binari)
----------
0011 1101  (61 dalam desimal)

Lihat bagaimana ia menyimpan angka 1 di mana saja nombor memiliki 1? Itulah operator OR bitwise!

Operator XOR (^) Bitwise

Operator XOR adalah seperti rakannya yang kikir yang suka hal-hal yang berbeda. Ia mengembalikan 1 jika bit berbeda, dan 0 jika mereka sama.

Mari lihat contohnya:

#include <stdio.h>

int main() {
unsigned int a = 60;  // 60 = 0011 1100 dalam binari
unsigned int b = 13;  // 13 = 0000 1101 dalam binari

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

return 0;
}

Output:

a ^ b = 49

Ini adalah apa yang terjadi:

0011 1100  (60 dalam binari)
^ 0000 1101  (13 dalam binari)
----------
0011 0001  (49 dalam desimal)

XOR sering digunakan dalam kriptografi karena ia mudah untuk dikembalikan. Jika kamu XOR nombor dua kali dengan nilai yang sama, kamu mendapat kembali nombor asal. Keren, kan?

Operator Shift Kiri (<<)

Operator shift kiri adalah seperti rakit penyedia yang menggerakkan bit ke kiri. Ia menggeser setiap bit ke kiri oleh jumlah posisi yang ditentukan.

Ini adalah bagaimana ia bekerja:

#include <stdio.h>

int main() {
unsigned int a = 60;  // 60 = 0011 1100 dalam binari

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

return 0;
}

Output:

a << 2 = 240

Mari kita pecahkan:

0011 1100  (60 dalam binari)
<<2 (shift kiri oleh 2)
----------
1111 0000  (240 dalam desimal)

Lihat bagaimana bit bergerak ke kiri, dan 0 baru mengisi dari kanan? Juga, menggeser ke kiri oleh 1 adalah sama dengan mengkalikan dengan 2. Jadi, menggeser ke kiri oleh 2 adalah seperti mengkalikan dengan 4!

Operator Shift Kanan (>>)

Operator shift kanan adalah seperti kembaran lawan operator shift kiri. Ia menggerakkan bit ke kanan.

Ini adalah contohnya:

#include <stdio.h>

int main() {
unsigned int a = 60;  // 60 = 0011 1100 dalam binari

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

return 0;
}

Output:

a >> 2 = 15

Ini adalah apa yang terjadi:

0011 1100  (60 dalam binari)
>>2 (shift kanan oleh 2)
----------
0000 1111  (15 dalam desimal)

Bit bergerak ke kanan, dan 0 baru mengisi dari kiri. Menggeser ke kanan oleh 1 adalah seperti mengbagi dengan 2 (mengabaikan sisa).

Operator Komplemen 1's (~)

Operator komplemen 1's adalah seperti cermin untuk bit. Ia mengalihkan setiap bit dari 0 menjadi 1 dan sebaliknya.

Ini adalah bagaimana ia bekerja:

#include <stdio.h>

int main() {
unsigned int a = 60;  // 60 = 0011 1100 dalam binari

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

return 0;
}

Output:

~a = 4294967235

Apa yang terjadi di sini? Mari kita pecahkan:

0000 0000 0000 0000 0000 0000 0011 1100  (60 dalam binari 32-bit)
~(komplemen 1's)
----------------------------------------
1111 1111 1111 1111 1111 1111 1100 0011  (4294967235 dalam desimal)

Setiap 0 menjadi 1, dan setiap 1 menjadi 0. Hasil ini terlihat besar karena kita menggunakan unsigned int, yang menginterpretasikan semua bit 1 sebagai angka positif.

Kesimpulan

Dan itu adalah, rakyat! Kita telah melakukan perjalanan melalui wilayah operator bitwise di C. Alat yang kuat ini mungkin terlihat sedikit tricky pada awalnya, tetapi dengan latihan, kamu akan menemukan mereka sangat berguna untuk tugas seperti bekerja dengan perangkat keras, mengoptimalkan kode, atau bahkan trik yang keren (jika pesta kamu melibatkan matematika binari, itu adalah).

Ingat, kunci untuk menguasai operator ini adalah latihan. Cobalah untuk menulis program kamu sendiri menggunakan operator ini. Eksperimen dengan nombor yang berbeda dan lihat hasil yang kamu dapatkan. Sebelum kamu tahu, kamu akan menjadi bit-twiddling dengan yang terbaik diantara mereka!

Selamat coding, dan mohon bits selalu berada di atas kamu!

Operator Simbol Keterangan
AND & Mengembalikan 1 jika kedua bit adalah 1, jika tidak 0
OR | Mengembalikan 1 jika setidaknya satu bit adalah 1, jika tidak 0
XOR ^ Mengembalikan 1 jika bit berbeda, 0 jika sama
Shift Kiri << Menggeser bit ke kiri oleh jumlah posisi yang ditentukan
Shift Kanan >> Menggeser bit ke kanan oleh jumlah posisi yang ditentukan
Komplemen 1's ~ Mengalihkan semua bit (0 menjadi 1, 1 menjadi 0)

Credits: Image by storyset