Operator aritmetika adalah operator paling sering kita pakai di C++: lima simbol yang menghitung nilai dari dua operand, ditambah satu-dua operator unary yang bekerja pada satu operand saja. Meski tampak sederhana, ada dua perilaku yang sering membuat hasil hitung pemula melenceng: pembagian integer yang membuang bagian desimal, dan aturan tanda pada operator modulo. Pada Chapter ini kita membedah kelima operator aritmetika biner, melihat perbedaan pembagian integer versus floating-point, lalu menguji semuanya dengan program sungguhan. Setelah itu, pola a op= b yang lebih ringkas akan kita bahas pada Chapter Operator Penugasan.
Lima Operator Dasar #
Kelima operator ini menghitung hasil dari dua operand, misalnya a + b. Keempatnya pertama mengenal +, -, * dari pelajaran matematika, sedangkan % khas dunia pemrograman.
| Operator | Nama | Contoh | Hasil (a=7, b=2) |
|---|---|---|---|
+ | penjumlahan | a + b | 9 |
- | pengurangan | a - b | 5 |
* | perkalian | a * b | 14 |
/ | pembagian | a / b | 3 |
% | modulo (sisa bagi) | a % b | 1 |
Perhatikan bahwa a / b menghasilkan 3, bukan 3.5. Penjelasannya ada di bagian berikutnya, karena perilaku operator / bergantung pada tipe operandnya.
#include <iostream>
int main() {
int a = 7;
int b = 2;
std::cout << "a = " << a << ", b = " << b << "\n\n";
std::cout << "a + b = " << a + b << "\n";
std::cout << "a - b = " << a - b << "\n";
std::cout << "a * b = " << a * b << "\n";
std::cout << "a / b = " << a / b << " (kedua operand integer)\n";
std::cout << "a % b = " << a % b << " (sisa pembagian)\n\n";
double c = 7.0;
std::cout << "c / b = " << c / b << " (satu operand double)\n";
std::cout << "a / 2.0 = " << a / 2.0 << "\n\n";
// Tanda hasil % mengikuti operand kiri (dividend)
std::cout << "-7 % 2 = " << -7 % 2 << "\n";
std::cout << "7 % -2 = " << 7 % -2 << "\n\n";
// Unary minus membalik tanda
int x = 5;
std::cout << "x = " << x << "\n";
std::cout << "-x = " << -x << "\n";
return 0;
}Output yang Dihasilkan:
a = 7, b = 2
a + b = 9
a - b = 5
a * b = 14
a / b = 3 (kedua operand integer)
a % b = 1 (sisa pembagian)
c / b = 3.5 (satu operand double)
a / 2.0 = 3.5
-7 % 2 = -1
7 % -2 = 1
x = 5
-x = -5Mari kita bedah baris demi baris:
- Baris 5-6 (
int a = 7; int b = 2;): dua variabel integer menjadi operand utama. Karena keduanya bertipeint, semua operasi di atasnya mengikuti aturan aritmetika integer. - Baris 12-13 (
a / bdana % b): pembagian integer7 / 2menghasilkan3, dan modulo menghasilkan sisa1. Keduanya saling melengkapi:3 * 2 + 1kembali menjadi7. - Baris 16-17 (
c / bdana / 2.0): begitu salah satu operand bertipedouble, pembagian menjadi pembagian riil dan hasilnya3.5. Tipedoubledibahas tuntas pada Chapter Floating-Point di Section Variabel dan Tipe Data. - Baris 20-21 (
-7 % 2dan7 % -2): tanda hasil modulo mengikuti operand kiri, sehingga-7 % 2bernilai-1dan7 % -2bernilai1. - Baris 24-26 (
-x): operator-dengan satu operand disebut unary minus; ia membalik tandaxdari5menjadi-5.
Pembagian Integer vs Floating-Point #
Aturan C++ terhadap operator / sederhana: bila kedua operand bertipe integer, hasilnya juga integer dan bagian desimal dipotong, bukan dibulatkan. Oleh karena itu 7 / 2 menghasilkan 3 dan 9 / 10 menghasilkan 0, bukan 0.9. Pemotongan ini disebut truncation dan berlaku juga untuk bilangan negatif, yaitu memotong ke arah nol: -7 / 2 menghasilkan -3.
Begitu salah satu operand bertipe floating-point (float atau double), operand integer satunya dikonversi otomatis menjadi floating-point, lalu pembagian berjalan secara riil. Kebiasaan yang baik adalah menulis salah satu operand sebagai literal floating-point, misalnya a / 2.0, agar maksud kita terbaca jelas di source code.
Operator Modulo: Sisa Pembagian #
Operator % menghasilkan sisa pembagian integer dan hanya boleh dipakai pada tipe integer. Untuk tipe floating-point, C++ tidak menyediakan %; gunakan fungsi std::fmod dari header <cmath> bila butuh sisa bagi bilangan riil.
Aturan tandanya perlu diingat: hasil % selalu mengikuti tanda operand kiri (dividend), bukan operand kanan. Contoh pada program di atas menunjukkan -7 % 2 menghasilkan -1 dan 7 % -2 menghasilkan 1. Aturan ini berlaku sejak C++11 dan konsisten dengan pembagian yang memotong ke arah nol.
Dalam praktik, modulo sering dipakai untuk menguji kelipatan, misalnya n % 2 == 0 untuk menguji apakah n genap, atau untuk berpindah-pindah indeks secara melingkar. Contoh-contoh tersebut baru bisa kita tulis lengkap setelah mengenal operator perbandingan dan control flow.
Unary Minus dan Unary Plus #
Selama ini kita memakai - dan + dengan dua operand; bentuk itu disebut binary operator. C++ juga menyediakan bentuk unary-nya. Unary minus, ditulis -x, menghasilkan nilai x dengan tanda terbalik tanpa mengubah isi variabel aslinya. Unary plus, ditulis +x, praktis tidak mengubah nilai operand integer dan lebih sering ditemui pada konteks promosi tipe; kita menuliskannya di sini agar lengkap.
Karena operator - bisa berarti pengurangan biner sekaligus unary minus, compiler menentukan maknanya dari jumlah operand yang diberikan. Ekspresi 7 - 2 adalah pengurangan, sedangkan -2 sebagai bagian ekspresi adalah unary minus. Tata cara compiler memilih di antara beberapa makna ini diatur oleh precedence, yang kita bahas khusus pada Chapter Precedence dan Associativity.
Rangkuman #
+,-,*bekerja seperti matematika biasa, dengan operand integer maupun floating-point./memotong bagian desimal hanya bila kedua operand integer; satu operand floating-point cukup untuk menghasilkan pembagian riil.%hanya untuk integer, menghasilkan sisa bagi, dan tandanya mengikuti dividend.- Pembagian atau modulo dengan nol pada integer adalah undefined behavior; jaga nilai pembaginya.
Operator aritmetika menghasilkan nilai, tetapi selama ini kita langsung mencetaknya. Chapter berikutnya membahas operator yang menampung nilai ke variabel: operator penugasan, beserta bentuk ringkasnya seperti += dan *=.