0Pricing
C Academy · Pelajaran

Pergeseran

Pergeseran ke kiri dan kanan.

Pergeseran adalah pelajaran C Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.

Menggeser Bit

Operator pergeseran memindahkan semua bit suatu bilangan bulat ke kiri atau ke kanan sebanyak sejumlah posisi.

Pergeseran ke kiri adalah << dan pergeseran ke kanan adalah >>.

#include <stdio.h>

int main(void) {
    unsigned x = 1;
    printf("1 << 3 = %u\n", x << 3);
    return 0;
}

Pergeseran Kiri Mengalikan

Menggeser ke kiri sebanyak n posisi mengalikan nilai tak bertanda dengan 2 pangkat n.

1 << 3 adalah 8, dan 5 << 1 adalah 10.

#include <stdio.h>

int main(void) {
    printf("5 << 1 = %u\n", 5u << 1);
    printf("3 << 4 = %u\n", 3u << 4);
    return 0;
}

Pergeseran Kanan Membagi

Menggeser ke kanan sebanyak n posisi membagi nilai tak bertanda dengan 2 pangkat n dan membuang bit yang terlepas dari ujung kanan.

20 >> 2 adalah 5.

#include <stdio.h>

int main(void) {
    printf("20 >> 2 = %u\n", 20u >> 2);
    printf("7 >> 1 = %u\n", 7u >> 1);
    return 0;
}

Pangkat Dua

Menggeser 1 ke kiri adalah cara tercepat untuk menghasilkan pangkat dua.

1 << n adalah pangkat dua ke-n.

#include <stdio.h>

int main(void) {
    for (int n = 0; n < 6; n++) {
        printf("2^%d = %u\n", n, 1u << n);
    }
    return 0;
}

Memvisualisasikan Pergeseran

Mencetak bit sebelum dan sesudah pergeseran menunjukkan bagaimana polanya bergeser.

#include <stdio.h>

void print_bits(unsigned char v) {
    for (int i = 7; i >= 0; i--) putchar((v >> i) & 1 ? '1' : '0');
    putchar('\n');
}

int main(void) {
    unsigned char v = 0b00000110;
    print_bits(v);
    print_bits(v << 2);
    return 0;
}

Mengambil Bit

Untuk membaca bit nomor i, geser nilai ke kanan sebanyak i posisi lalu lakukan operasi pemaskeran dengan 1.

Hasilnya adalah 0 atau 1.

#include <stdio.h>

int main(void) {
    unsigned v = 0b10110;
    for (int i = 0; i < 5; i++) {
        printf("bit %d = %u\n", i, (v >> i) & 1);
    }
    return 0;
}

Membangun Nilai Bit demi Bit

Anda dapat menyusun sebuah bilangan dengan menggeser bit ke posisi yang tepat lalu menggabungkannya menggunakan OR.

#include <stdio.h>

int main(void) {
    unsigned v = 0;
    v |= (1u << 0);
    v |= (1u << 2);
    v |= (1u << 4);
    printf("v = %u\n", v);
    return 0;
}

Perhatian pada Pergeseran Kanan Bilangan Bertanda

Pergeseran ke kanan pada bilangan bulat bertanda negatif ditentukan oleh implementasi: operasi tersebut mungkin menyalin bit tanda.

Untuk operasi bit yang hasilnya dapat diprediksi, utamakan tipe unsigned.

#include <stdio.h>

int main(void) {
    int s = -8;
    printf("-8 >> 1 = %d (implementation-defined)\n", s >> 1);
    unsigned u = 8;
    printf("8u >> 1 = %u\n", u >> 1);
    return 0;
}

Hindari Pergeseran Berlebihan

Pergeseran sebesar atau lebih besar daripada lebar tipe menghasilkan perilaku tak terdefinisi.

Pergeseran nilai 32-bit sebesar 32 atau lebih tidak diperbolehkan.

#include <stdio.h>
#include <limits.h>

int main(void) {
    printf("unsigned has %zu bits\n", sizeof(unsigned) * CHAR_BIT);
    printf("Safe shift 1u << 31 = %u\n", 1u << 31);
    return 0;
}

Menggabungkan Pergeseran dan Masker

Pergeseran dan masker secara bersama-sama dapat mengekstrak medan yang terdiri dari beberapa bit. Di sini kita mengambil 4 bit tengah dari sebuah byte.

#include <stdio.h>

int main(void) {
    unsigned v = 0b11010110;
    unsigned field = (v >> 2) & 0b1111;
    printf("field = %u\n", field);
    return 0;
}

Perkalian dan Penjumlahan Cepat

Menggabungkan pergeseran memungkinkan Anda mengalikan dengan konstanta secara cepat. Mengalikan dengan 10 sama dengan menggeser sebesar 3 (dikali 8), lalu menggeser sebesar 1 (dikali 2).

#include <stdio.h>

int main(void) {
    unsigned x = 7;
    unsigned times10 = (x << 3) + (x << 1);
    printf("7 * 10 = %u\n", times10);
    return 0;
}

Pemeriksaan Cepat

Uji pengetahuan Anda tentang pergeseran.

Rangkuman

Anda telah mempelajari operator pergeseran:

  • << menggeser ke kiri dan mengalikan dengan pangkat dua.
  • >> menggeser ke kanan dan membagi dengan pangkat dua.
  • (v >> i) & 1 mengekstrak satu bit.
  • Gunakan unsigned agar pergeseran dapat diprediksi, dan jangan pernah menggeser sebesar lebar tipe atau lebih.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pergeseran” gratis?

Ya — teks lengkap “Pergeseran” 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 “Pergeseran”?

Pergeseran ke kiri dan kanan. 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 2 dari 4.

Berapa lama pelajaran “Pergeseran” 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