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) & 1mengekstrak satu bit.- Gunakan
unsignedagar 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.