Jebakan Konversi
Overflow dan pemotongan.
Jebakan Konversi 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.
Konversi Dapat Menjadi Masalah
Konversi diam-diam memang praktis, tetapi dapat menyebabkan luapan, pemotongan, dan kejutan tanda. Pelajaran ini membahas jebakan tersebut.
#include <stdio.h>
int main(void) {
printf("Beware silent conversions\n");
return 0;
}Luapan Bilangan Bulat
Menugaskan nilai yang terlalu besar untuk tipe bilangan bulat tujuan akan membuatnya berputar atau kehilangan data.
#include <stdio.h>
#include <limits.h>
int main(void) {
int max = INT_MAX;
printf("INT_MAX = %d\n", max);
return 0;
}Pemotongan saat Mempersempit
Memasukkan nilai besar ke tipe yang lebih kecil hanya mempertahankan bit rendahnya, sehingga bilangan rusak tanpa pemberitahuan.
#include <stdio.h>
int main(void) {
int big = 300;
unsigned char small = (unsigned char)big;
printf("small = %d\n", small);
return 0;
}Pencampuran Signed dan Unsigned
Mencampurkan signed dan unsigned akan mengonversi nilai signed menjadi unsigned, sehingga bilangan negatif berubah menjadi bilangan positif yang sangat besar.
#include <stdio.h>
int main(void) {
int a = -1;
unsigned int b = 1;
if (a > b)
printf("surprise: -1 > 1 as unsigned\n");
return 0;
}Jebakan Penghitung Perulangan
Penghitung perulangan unsigned yang turun hingga di bawah nol akan berputar menjadi nilai yang sangat besar dan menyebabkan perulangan tanpa akhir. Gunakan penghitung signed saat menghitung mundur.
#include <stdio.h>
int main(void) {
for (int i = 3; i >= 0; i--)
printf("%d ", i);
printf("\n");
return 0;
}Kehilangan saat Float menjadi Int
Mengonversi float menjadi int menghilangkan pecahannya. Jika nilainya melebihi rentang int, hasilnya tidak terdefinisi.
#include <stdio.h>
int main(void) {
double d = 3.99;
int n = (int)d;
printf("n = %d\n", n);
return 0;
}Kehilangan Presisi double menjadi float
Menyimpan double berpresisi tinggi ke dalam float menghilangkan digit, yang dapat terakumulasi dalam perhitungan panjang.
#include <stdio.h>
int main(void) {
double d = 1.123456789012345;
float f = (float)d;
printf("%.7f\n", f);
return 0;
}Kejutan Tanda pada char
Apakah char bertanda atau tidak ditentukan oleh implementasi. Gunakan unsigned char untuk nilai byte agar terhindar dari hasil negatif.
#include <stdio.h>
int main(void) {
unsigned char b = 200;
printf("b = %d\n", b);
return 0;
}Membagi lalu Mengonversi
Melakukan pembagian bilangan bulat lalu melakukan cast tidak dapat mengembalikan pecahan yang hilang. Lakukan cast sebelum membagi.
#include <stdio.h>
int main(void) {
int a = 7, b = 2;
double wrong = (double)(a / b);
double right = (double)a / b;
printf("%.1f vs %.1f\n", wrong, right);
return 0;
}Membandingkan Ukuran
Gunakan konstanta limits.h untuk memahami rentang yang dapat ditampung suatu tipe sebelum menganggap sebuah nilai dapat disimpan.
#include <stdio.h>
#include <limits.h>
int main(void) {
printf("char range: %d to %d\n", CHAR_MIN, CHAR_MAX);
return 0;
}Konversi Defensif
Periksa rentang sebelum mempersempit tipe, utamakan tipe yang lebih lebar jika ragu, dan buat cast secara eksplisit agar maksudnya jelas.
#include <stdio.h>
int main(void) {
long value = 200;
if (value >= 0 && value <= 255)
printf("fits in a byte: %ld\n", value);
return 0;
}Pemeriksaan Singkat
Uji pemahaman Anda tentang masalah konversi.
Ringkasan: Masalah Konversi
Anda telah mempelajari bahaya konversi diam-diam.
- Persempitan tipe dapat menyebabkan luapan atau pemotongan
- Pencampuran signed/unsigned membalik hasil perbandingan
- Penghitung unsigned berputar saat berada di bawah nol
- Lakukan cast sebelum membagi agar pecahan tetap ada
- Periksa rentang dan buat cast secara eksplisit
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Jebakan Konversi” gratis?
Ya — teks lengkap “Jebakan Konversi” 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 “Jebakan Konversi”?
Overflow dan pemotongan. 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 “Jebakan Konversi” 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
- Konversi Implisit
- Cast Eksplisit
- Konversi Bilangan Bulat dan Float
- Jebakan Konversi