0Pricing
C Academy · Pelajaran

Trik Bit Praktis

Teknik umum.

Trik Bit Praktis adalah pelajaran C Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.

Trik Bit yang Berguna

Setelah memahami operator bitwise, Anda dapat menggunakan berbagai trik ringkas. Trik-trik ini cepat dan sering muncul dalam kode nyata.

Mari kita bahas trik yang paling umum.

#include <stdio.h>

int main(void) {
    unsigned x = 6;
    printf("x & 1 = %u (odd if 1)\n", x & 1);
    return 0;
}

Genap atau Ganjil

Bit paling rendah menunjukkan paritas. x & 1 bernilai 1 untuk bilangan ganjil dan 0 untuk bilangan genap.

#include <stdio.h>

int main(void) {
    for (unsigned x = 0; x < 5; x++) {
        printf("%u is %s\n", x, (x & 1) ? "odd" : "even");
    }
    return 0;
}

Memeriksa Pangkat Dua

Bilangan positif merupakan pangkat dua jika tepat satu bitnya disetel. Ekspresi x & (x - 1) hanya bernilai 0 dalam kondisi tersebut.

#include <stdio.h>

int is_pow2(unsigned x) {
    return x != 0 && (x & (x - 1)) == 0;
}

int main(void) {
    printf("%d %d %d\n", is_pow2(16), is_pow2(18), is_pow2(1));
    return 0;
}

Menghapus Bit Tersetel Terendah

x & (x - 1) menghapus bit tersetel yang paling rendah. Inilah dasar penghitungan bit tersetel secara cepat.

#include <stdio.h>

int main(void) {
    unsigned x = 0b10110;
    printf("before: %u\n", x);
    printf("after:  %u\n", x & (x - 1));
    return 0;
}

Mengisolasi Bit Tersetel Terendah

x & (-x) mengisolasi bit tersetel yang paling rendah sehingga hanya bit tunggal tersebut yang tetap aktif.

Teknik ini mengandalkan representasi komplemen dua.

#include <stdio.h>

int main(void) {
    unsigned x = 0b10110;
    printf("lowest set bit = %u\n", x & (-x));
    return 0;
}

Menghitung Bit Tersetel

Dengan berulang kali menghapus bit tersetel yang paling rendah, Anda dapat menghitung jumlah bit yang disetel, dalam jumlah langkah yang sama dengan banyaknya bit tersetel.

#include <stdio.h>

int popcount(unsigned x) {
    int n = 0;
    while (x) { x &= (x - 1); n++; }
    return n;
}

int main(void) {
    printf("%d\n", popcount(255));
    printf("%d\n", popcount(0b1010));
    return 0;
}

Menukar Tanpa Variabel Sementara

Pertukaran XOR menukar dua bilangan bulat tanpa penyimpanan tambahan.

#include <stdio.h>

int main(void) {
    int a = 3, b = 8;
    a ^= b; b ^= a; a ^= b;
    printf("a=%d b=%d\n", a, b);
    return 0;
}

Membulatkan ke Atas Menjadi Pangkat Dua

Anda dapat membulatkan nilai unsigned ke atas menjadi pangkat dua berikutnya dengan menyebarkan bit tertinggi ke arah bawah, lalu menambahkan 1.

#include <stdio.h>

unsigned next_pow2(unsigned v) {
    v--;
    v |= v >> 1; v |= v >> 2; v |= v >> 4;
    v |= v >> 8; v |= v >> 16;
    return v + 1;
}

int main(void) {
    printf("%u\n", next_pow2(17));
    printf("%u\n", next_pow2(100));
    return 0;
}

Memeriksa Perbedaan Bit

Dua nilai memiliki bit yang berbeda tepat pada posisi ketika a ^ b memiliki bit yang disetel. Menghitung bit-bit tersebut menghasilkan jarak Hamming.

#include <stdio.h>

int main(void) {
    unsigned a = 0b1101, b = 0b1011;
    unsigned diff = a ^ b;
    int count = 0;
    while (diff) { diff &= diff - 1; count++; }
    printf("hamming distance = %d\n", count);
    return 0;
}

Nilai Absolut Tanpa Percabangan

Dengan menggunakan bit tanda, Anda dapat menghitung nilai absolut tanpa if. Masker bernilai semua satu untuk bilangan negatif dan semua nol untuk bilangan nonnegatif.

#include <stdio.h>

int main(void) {
    int x = -42;
    int mask = x >> 31;
    int abs = (x + mask) ^ mask;
    printf("abs = %d\n", abs);
    return 0;
}

Menyetel Bit Berdasarkan Indeks

Gabungkan pergeseran dan OR untuk menyetel posisi bit sembarang yang dihitung saat program berjalan.

#include <stdio.h>

int main(void) {
    unsigned v = 0;
    int positions[] = {1, 3, 5};
    for (int i = 0; i < 3; i++) {
        v |= (1u << positions[i]);
    }
    printf("v = %u\n", v);
    return 0;
}

Pemeriksaan Cepat

Uji pengetahuan Anda tentang trik bit.

Rangkuman

Anda telah mempelajari trik bit praktis:

  • x & 1 menguji bilangan ganjil/genap.
  • x & (x - 1) menghapus bit tersetel terendah dan mendeteksi pangkat dua.
  • x & (-x) mengisolasi bit tersetel terendah.
  • Popcount, pertukaran XOR, jarak Hamming, dan nilai absolut tanpa percabangan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Trik Bit Praktis” gratis?

Ya — teks lengkap “Trik Bit Praktis” 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 “Trik Bit Praktis”?

Teknik umum. 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 4 dari 4.

Berapa lama pelajaran “Trik Bit Praktis” 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

  1. Operator Bitwise
  2. Pergeseran
  3. Masker Bit dan Flag
  4. Trik Bit Praktis
← Kembali ke C Academy