Saya cukup baru untuk pemrograman C, dan saya menemukan sedikit masking. Dapatkah seseorang menjelaskan kepada saya konsep dan fungsi umum dari bit masking? Contohnya sangat dihargai.
191
Saya cukup baru untuk pemrograman C, dan saya menemukan sedikit masking. Dapatkah seseorang menjelaskan kepada saya konsep dan fungsi umum dari bit masking? Contohnya sangat dihargai.
Jawaban:
Topeng menentukan bit mana yang ingin Anda simpan, dan bit mana yang ingin Anda hapus.
Masking adalah tindakan menerapkan topeng pada suatu nilai. Ini dicapai dengan melakukan:
Di bawah ini adalah contoh mengekstraksi subset bit dalam nilai:
Menerapkan mask ke nilai berarti kita ingin menghapus 4 bit pertama (lebih tinggi), dan menyimpan 4 bit terakhir (lebih rendah). Jadi kami telah mengekstraksi 4 bit yang lebih rendah. Hasilnya adalah:
Masking diimplementasikan menggunakan AND, jadi di C kita mendapatkan:
Berikut ini adalah kasus penggunaan yang cukup umum: Mengekstrak byte individual dari kata yang lebih besar. Kami mendefinisikan bit orde tinggi dalam kata sebagai byte pertama. Kami menggunakan dua operator untuk ini
&
,, dan>>
(bergeser ke kanan). Ini adalah bagaimana kita dapat mengekstrak empat byte dari integer 32-bit:Perhatikan bahwa Anda dapat mengubah urutan operator di atas, pertama-tama Anda bisa melakukan mask, kemudian shift. Hasilnya sama, tetapi sekarang Anda harus menggunakan topeng yang berbeda:
sumber
&
.#define MASK 0x000000FF .... my_uint32_t &= ~MASK
.b
literal untuk menunjukkan biner tidak didukung oleh semua kompiler, benar?Masking berarti menjaga / mengubah / menghapus bagian informasi yang diinginkan. Mari kita lihat operasi masking gambar; seperti- operasi masking ini menghilangkan segala sesuatu yang bukan kulit
Kami sedang melakukan DAN operasi dalam contoh ini. Ada juga operator masking lainnya- OR , XOR .
Masking Bit berarti memaksakan mask over bits. Inilah sedikit penutup dengan DAN -
Jadi, hanya 4 bit tengah (seperti bit ini
1
dalam topeng ini) yang tersisa.Mari kita lihat ini dengan XOR -
Sekarang, 4 bit tengah dibalik (
1
menjadi0
,0
menjadi1
).Jadi, menggunakan bit-mask kita bisa mengakses bit-bit [ contoh ]. Terkadang, teknik ini juga dapat digunakan untuk meningkatkan kinerja. Ambil ini sebagai contoh-
Fungsi ini memberi tahu apakah bilangan bulat ganjil / genap. Kita dapat mencapai hasil yang sama dengan efisiensi lebih banyak menggunakan bit-mask-
Penjelasan Singkat : Jika bit paling tidak signifikan dari angka biner adalah
1
itu aneh; karena0
itu akan genap. Jadi, dengan melakukan AND with1
kami menghapus semua bit lain kecuali untuk bit yang paling signifikan yaitu:sumber