Anjakan
Anjakan kiri dan kanan
Anjakan ialah pelajaran C Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran C Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus C Academy merangkumi sejumlah 4 pelajaran.
Menganjak Bit
Operator anjakan menggerakkan semua bit integer ke kiri atau ke kanan sebanyak beberapa kedudukan.
Anjakan kiri ialah << dan anjakan kanan ialah >>.
#include <stdio.h>
int main(void) {
unsigned x = 1;
printf("1 << 3 = %u\n", x << 3);
return 0;
}Anjakan Kiri Mendarab
Menganjak ke kiri sebanyak n kedudukan mendarab nilai tidak bertanda dengan 2 dipangkatkan n.
1 << 3 ialah 8, dan 5 << 1 ialah 10.
#include <stdio.h>
int main(void) {
printf("5 << 1 = %u\n", 5u << 1);
printf("3 << 4 = %u\n", 3u << 4);
return 0;
}Anjakan Kanan Membahagi
Menganjak ke kanan sebanyak n kedudukan membahagi nilai tidak bertanda dengan 2 dipangkatkan n, sambil membuang bit yang terkeluar dari hujung kanan.
20 >> 2 ialah 5.
#include <stdio.h>
int main(void) {
printf("20 >> 2 = %u\n", 20u >> 2);
printf("7 >> 1 = %u\n", 7u >> 1);
return 0;
}Kuasa Dua
Menganjak 1 ke kiri ialah cara terpantas untuk menjana kuasa dua.
1 << n ialah kuasa 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;
}Memvisualkan Anjakan
Mencetak bit sebelum dan selepas anjakan menunjukkan cara corak tersebut bergerak.
#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;
}Mengekstrak Bit
Untuk membaca bit bernombor i, anjak nilai ke kanan sebanyak i dan gunakan topeng 1.
Hasilnya ialah 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;
}Membina Nilai Sedikit demi Sedikit
Anda boleh membina nombor dengan menganjak bit ke kedudukannya dan 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;
}Awas terhadap Anjakan Kanan Bertanda
Menganjak integer bertanda negatif ke kanan ditakrifkan oleh pelaksanaan: bit tanda mungkin disalin.
Untuk operasi bit yang boleh dijangka, utamakan jenis 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;
}Elakkan Anjakan Berlebihan
Menganjak sebanyak nilai yang lebih besar daripada atau sama dengan lebar jenis menghasilkan tingkah laku tidak ditakrifkan.
Menganjak nilai 32-bit sebanyak 32 atau lebih tidak dibenarkan.
#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 Anjakan dan Topeng
Anjakan dan topeng bersama-sama mengekstrak medan yang terdiri daripada beberapa bit. Di sini kita mengambil 4 bit tengah daripada satu bait.
#include <stdio.h>
int main(void) {
unsigned v = 0b11010110;
unsigned field = (v >> 2) & 0b1111;
printf("field = %u\n", field);
return 0;
}Pendaraban dan Penambahan Pantas
Menggabungkan anjakan membolehkan anda mendarab dengan pemalar dengan cepat. Mendarab dengan 10 bersamaan dengan menganjak sebanyak 3 (darab 8) kemudian menganjak sebanyak 1 (darab 2).
#include <stdio.h>
int main(void) {
unsigned x = 7;
unsigned times10 = (x << 3) + (x << 1);
printf("7 * 10 = %u\n", times10);
return 0;
}Semakan Pantas
Uji pengetahuan anda tentang anjakan.
Imbas Kembali
Anda telah mempelajari tentang pengendali anjakan:
<<menganjak ke kiri dan mendarab dengan kuasa dua.>>menganjak ke kanan dan membahagi dengan kuasa dua.(v >> i) & 1mengekstrak satu bit.- Gunakan
unsigneduntuk anjakan yang boleh dijangka dan jangan sekali-kali menganjak sebanyak lebar jenis atau lebih.
Pelajari C dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 39
- Pelajaran
- 144
Soalan Lazim
Adakah pelajaran “Anjakan” percuma?
Ya — teks penuh “Anjakan” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus C Academy, tingkat taraf kepada CoddyKit PRO. Kursus C Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Anjakan”?
Anjakan kiri dan kanan Anda berlatih C Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan C Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran C Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Anjakan” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran C Academy ini?
Ya. Setiap pelajaran C Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.