Operator pembagian (division) adalah salah satu operasi aritmatika fundamental dalam pemrograman C++. Meskipun terlihat sederhana, perilaku operator pembagian di C++ sangat bergantung pada tipe data yang terlibat, terutama dalam hal pembagian bilangan bulat (integer division) versus pembagian bilangan pecahan (floating-point division). Memahami perbedaan ini krusial untuk menghindari kesalahan logika dalam program Anda.
Operator Pembagian (/) di C++
Di C++, operator pembagian utama adalah garis miring tunggal (/). Cara kerjanya dipengaruhi oleh tipe data operand:
Jika kedua operand adalah bilangan bulat (int, long, dll.), hasilnya akan selalu berupa bilangan bulat. Bagian desimal atau sisa pembagian akan dihilangkan (dipotong/truncated) menuju nol, bukan dibulatkan.
int a = 10;
int b = 3;
int hasil_int = a / b; // hasil_int akan bernilai 3, bukan 3.333...
7 / 2 menghasilkan 3. Angka .5 hilang.
Jika salah satu atau kedua operand adalah bilangan pecahan (float atau double), maka operasi akan dilakukan dalam aritmatika floating-point, dan hasilnya akan menyertakan bagian desimal.
double x = 10.0;
int y = 3;
double hasil_double = x / y; // hasil_double akan bernilai 3.333333...
int p = 10;
double q = 3.0;
double hasil_campuran = p / q; // hasil_campuran juga akan bernilai 3.333333...
Selain pembagian standar, C++ juga menyediakan operator modulo (%). Operator ini mengembalikan sisa pembagian dari operasi pembagian bilangan bulat.
int total_permen = 17;
int jumlah_anak = 5;
int permen_masing_masing = total_permen / jumlah_anak; // 17 / 5 = 3
int sisa_permen = total_permen % jumlah_anak; // 17 % 5 = 2
// Output: 3 permen, sisa 2 permen.
Perlu diperhatikan bahwa operator modulo % hanya dapat digunakan pada tipe data integer. Mencoba menggunakannya pada tipe float atau double akan menghasilkan kesalahan kompilasi.
Pembagian dengan nol adalah kasus khusus yang harus dihindari secara ketat. Dalam matematika, pembagian dengan nol tidak terdefinisi.
Jika Anda membagi bilangan bulat dengan nol (misalnya 10 / 0), ini akan menyebabkan perilaku tak terdefinisi (Undefined Behavior) dalam C++. Pada banyak sistem operasi, ini akan segera menghentikan program Anda (crash) dengan pesan kesalahan runtime.
Ketika membagi bilangan pecahan dengan nol (misalnya 10.0 / 0.0), standar IEEE 754 yang biasanya digunakan oleh C++ akan menghasilkan nilai khusus, yaitu Infinity (tak hingga), yang diwakili sebagai inf.
#include <iostream>
#include <cmath> // Untuk mengecek isinf()
int main() {
double hasil = 5.0 / 0.0;
std::cout << "Hasil float dibagi nol: " << hasil << std::endl; // Output: inf
if (std::isinf(hasil)) {
std::cout << "Ini adalah tak hingga." << std::endl;
}
return 0;
}
inf daripada crash, program Anda tetap harus memvalidasi input pembagi agar tidak nol, kecuali Anda secara eksplisit menangani kasus tak hingga ini.
Seringkali, programmer ingin hasil pembagian integer tetap akurat secara desimal. Solusinya adalah dengan melakukan casting (pengubahan tipe data) pada salah satu operand sebelum pembagian terjadi. Ini memaksa kompilator untuk menggunakan aritmatika floating-point.
Misalnya, jika kita ingin 10 / 3 menghasilkan 3.333, bukan 3:
int a = 10;
int b = 3;
// Cara 1: Casting salah satu operand menjadi double
double hasil_float_1 = (double)a / b; // Hasil: 3.333...
// Cara 2: Mengalikan dengan 1.0 (implisit casting)
double hasil_float_2 = 1.0 * a / b; // Hasil: 3.333...
// Cara 3: Casting keduanya (lebih eksplisit)
double hasil_float_3 = static_cast<double>(a) / static_cast<double>(b); // Hasil: 3.333...
Dengan memahami perbedaan antara pembagian integer dan floating-point, serta cara operator modulo bekerja, Anda dapat mengendalikan operasi numerik Anda di C++ dengan presisi yang diinginkan.