Karena mereka operasi mendasar.
Dengan alur pemikiran yang sama, Anda dapat berargumen bahwa penambahan memiliki sedikit kegunaan di dunia nyata, karena dapat diganti sepenuhnya dengan pengurangan (dan negasi) dan multiplikasi. Tetapi kami terus menambahkan karena ini adalah operasi yang mendasar.
Dan jangan berpikir sejenak bahwa hanya karena Anda belum melihat banyak kebutuhan untuk operasi bitwise tidak berarti mereka tidak terlalu sering digunakan. Memang, saya telah menggunakan operasi bitwise di hampir setiap bahasa yang saya gunakan untuk hal-hal seperti bit masking.
Dari atas kepala saya, saya telah menggunakan operasi bitwise untuk pemrosesan gambar, bitfields dan flags, pemrosesan teks (misalnya, semua karakter dari kelas tertentu sering berbagi pola bit yang umum), pengkodean dan decoding data serial, decoding VM atau CPU opcodes, dan sebagainya. Tanpa operasi bitwise, sebagian besar tugas ini akan membutuhkan operasi yang lebih kompleks berkali-kali untuk melakukan tugas dengan kurang andal atau dengan keterbacaan yang lebih buruk.
Sebagai contoh:
// Given a 30-bit RGB color value as a 32-bit int
// A lot of image sensors spit out 10- or 12-bit data
// and some LVDS panels have a 10- or 12-bit format
b = (color & 0x000003ff);
g = (color & 0x000ffc00) >> 10;
r = (color & 0x3ff00000) >> 20;
// Going the other way:
color = ((r << 20) & 0x3ff00000) | ((g << 10) & 0x000ffc00) | (b & 0x000003ff);
Mendekode instruksi CPU untuk CPU tipe RISC (seperti ketika meniru platform lain) membutuhkan penggalian bagian-bagian dengan nilai besar seperti di atas. Kadang-kadang, melakukan operasi ini dengan multiplikasi dan pembagian dan modulo, dll., Bisa sepuluh kali lebih lambat dari operasi bitwise yang setara.