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.

OperatorNamaContohHasil (a=7, b=2)
+penjumlahana + b9
-pengurangana - b5
*perkaliana * b14
/pembagiana / b3
%modulo (sisa bagi)a % b1

Perhatikan bahwa a / b menghasilkan 3, bukan 3.5. Penjelasannya ada di bagian berikutnya, karena perilaku operator / bergantung pada tipe operandnya.

cpp
#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:

text
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 = -5

Mari kita bedah baris demi baris:

  1. Baris 5-6 (int a = 7; int b = 2;): dua variabel integer menjadi operand utama. Karena keduanya bertipe int, semua operasi di atasnya mengikuti aturan aritmetika integer.
  2. Baris 12-13 (a / b dan a % b): pembagian integer 7 / 2 menghasilkan 3, dan modulo menghasilkan sisa 1. Keduanya saling melengkapi: 3 * 2 + 1 kembali menjadi 7.
  3. Baris 16-17 (c / b dan a / 2.0): begitu salah satu operand bertipe double, pembagian menjadi pembagian riil dan hasilnya 3.5. Tipe double dibahas tuntas pada Chapter Floating-Point di Section Variabel dan Tipe Data.
  4. Baris 20-21 (-7 % 2 dan 7 % -2): tanda hasil modulo mengikuti operand kiri, sehingga -7 % 2 bernilai -1 dan 7 % -2 bernilai 1.
  5. Baris 24-26 (-x): operator - dengan satu operand disebut unary minus; ia membalik tanda x dari 5 menjadi -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 *=.