Masker Bit dan Flag
Atur, hapus, dan balik bit.
Masker Bit dan Flag adalah pelajaran C Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C Academy mencakup 4 pelajaran total.
Bit sebagai Penanda
Satu bilangan bulat dapat menyimpan banyak pengaturan aktif/nonaktif, satu pengaturan untuk setiap bit. Setiap bit adalah sebuah penanda.
Teknik ini ringkas dan cepat, serta umum digunakan dalam sistem operasi dan kode tertanam.
#include <stdio.h>
int main(void) {
unsigned flags = 0;
printf("Initial flags = %u\n", flags);
return 0;
}Mendefinisikan Masker
Masker adalah nilai dengan bit-bit tertentu yang disetel. Definisikan setiap penanda sebagai pangkat dua agar menempati bitnya sendiri.
#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
#define EXEC (1u << 2)
int main(void) {
printf("READ=%u WRITE=%u EXEC=%u\n", READ, WRITE, EXEC);
return 0;
}Menyetel Bit
Untuk mengaktifkan sebuah penanda, lakukan OR pada nilai dengan masker: flags |= MASK.
Bit yang sudah disetel akan tetap tersetel.
#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
int main(void) {
unsigned flags = 0;
flags |= READ;
flags |= WRITE;
printf("flags = %u\n", flags);
return 0;
}Menghapus Bit
Untuk menonaktifkan sebuah penanda, lakukan AND dengan masker terbalik: flags &= ~MASK.
Masker terbalik memiliki nilai 0 pada bit target dan nilai 1 di semua posisi lainnya.
#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
int main(void) {
unsigned flags = READ | WRITE;
flags &= ~WRITE;
printf("flags = %u\n", flags);
return 0;
}Membalik Bit
Untuk membalik sebuah penanda, lakukan XOR dengan masker: flags ^= MASK.
Jika sebelumnya aktif, penanda akan menjadi nonaktif, dan sebaliknya.
#include <stdio.h>
#define EXEC (1u << 2)
int main(void) {
unsigned flags = 0;
flags ^= EXEC;
printf("after toggle: %u\n", flags);
flags ^= EXEC;
printf("after toggle: %u\n", flags);
return 0;
}Memeriksa Bit
Untuk memeriksa apakah sebuah penanda aktif, lakukan AND dengan masker dan uji hasilnya: flags & MASK bernilai bukan nol jika bit tersebut disetel.
#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
int main(void) {
unsigned flags = READ;
if (flags & READ) printf("READ is on\n");
if (flags & WRITE) printf("WRITE is on\n");
else printf("WRITE is off\n");
return 0;
}Menyetel Beberapa Penanda
Gabungkan beberapa masker dengan OR untuk menyetel beberapa penanda sekaligus.
#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
#define EXEC (1u << 2)
int main(void) {
unsigned flags = READ | WRITE | EXEC;
printf("all set: %u\n", flags);
return 0;
}Memeriksa Beberapa Sekaligus
Untuk menguji apakah semua penanda dalam suatu kelompok telah disetel, lakukan AND dengan masker gabungan dan bandingkan hasilnya dengan masker itu sendiri.
#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
int main(void) {
unsigned flags = READ | WRITE;
unsigned need = READ | WRITE;
if ((flags & need) == need) printf("both present\n");
return 0;
}Mencetak Penanda Aktif
Ulangi seluruh masker Anda untuk melaporkan penanda mana yang sedang aktif.
#include <stdio.h>
#define READ (1u << 0)
#define WRITE (1u << 1)
#define EXEC (1u << 2)
int main(void) {
unsigned flags = READ | EXEC;
if (flags & READ) printf("R");
if (flags & WRITE) printf("W");
if (flags & EXEC) printf("X");
printf("\n");
return 0;
}Menghitung Bit yang Disetel
Untuk mengetahui jumlah penanda yang aktif, hitung bit yang disetel dengan berulang kali menghapus bit tersetel yang paling rendah.
#include <stdio.h>
int main(void) {
unsigned v = 0b10110;
int count = 0;
while (v) {
v &= (v - 1);
count++;
}
printf("set bits = %d\n", count);
return 0;
}Enum untuk Penanda
Menggunakan enum membuat definisi penanda tetap teratur dan mudah dibaca.
#include <stdio.h>
enum { OPT_A = 1, OPT_B = 2, OPT_C = 4 };
int main(void) {
unsigned opts = OPT_A | OPT_C;
printf("opts = %u\n", opts);
if (opts & OPT_C) printf("C enabled\n");
return 0;
}Pemeriksaan Cepat
Uji pengetahuan Anda tentang masker dan penanda.
Rangkuman
Anda telah mempelajari cara mengelola penanda bit:
- Setel dengan
flags |= MASK. - Hapus dengan
flags &= ~MASK. - Balik dengan
flags ^= MASK. - Uji dengan
flags & MASK. - Definisikan masker sebagai pangkat dua, sering kali menggunakan makro atau enum.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Masker Bit dan Flag” gratis?
Ya — teks lengkap “Masker Bit dan Flag” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C Academy, upgrade ke CoddyKit PRO. Kursus C Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Masker Bit dan Flag”?
Atur, hapus, dan balik bit. Kamu berlatih C Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C Academy?
Tidak diperlukan pengalaman sebelumnya. C Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Masker Bit dan Flag” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C Academy ini?
Ya. Setiap pelajaran C Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Operator Bitwise
- Pergeseran
- Masker Bit dan Flag
- Trik Bit Praktis