Operator aritmatik yang dipakai dalam C++ adalah :
+ tambah
– kurang
* kali
/ bagi
% modulus
Operator-operator di atas dikenal sebagai binary operators artinya operator-operator ini memerlukan dua operan. Operator +, -, * dan / telah jelas artinya, yang perlu dijelaskan adalah operator modulus (%), operator ini dipakai untuk mencari sisa dan pembagian antar bilangan bulat, misalnya 20 % 8 menghasilkan 4 karena sisa pembagian dari 20 dibagi 8 adalah 4. Operator + dan – dapat dipakai sebagai unary operator, artinya operator-operator ini hanya memerlukan satu operan saja. Suatu variabel dapat dinyatakan positip atau negatip dengan unary operator + atau -, misalnya:
a = -25;
b = +25;
c = -a+b; .
Suatu ekpresi dapat mengandung lebih dari satu jenis operator, C++ mengartikannya berdasar order of precedence dari operator-operator tersebut. Order of precedence dari operator menunjukkan hirarki matematis dari suatu operator misalnya:
2 + 3 * 2;
C++ akan menghitung 3*2 dulu karena operator kali (*) hirarkinya lebih tinggi dari operator + sehingga ekpresi di atas hasilnya adalah 8, bukan 10. Untuk operator aritmatik order of precedence-nya yang tinggi adalah kali (*), bagi (/) dan modulus (%) sedang yang rendah adalah tambah (+) dan kurang (-),Jadi C++ selalu melakukan kali, bagi dan modulus lalu diikuti tambah dan kurang. Operator-operator dalam C++ terdistribusi dalam 15 hirarki precedence yang dapat dilihat pada tabel di bawah ini.
Tabel Precedence dari Operator dalam C++
Precedence Level |
Symbol |
Description |
Associativity |
1 |
++ |
Prefex increment | Left to right |
— |
Prefex decrement | ||
() |
Function call and subexpression | ||
[] |
Array subscript | ||
-> |
Structure pointer | ||
. |
Structure member | ||
2 |
! |
Logical negation | Right to left |
~ |
1’s complement | ||
– |
Unary negation | ||
+ |
Unary plus | ||
(type) |
Type cast | ||
* |
Pointer deference | ||
& |
Address of | ||
Sizeof |
Size of | ||
3 |
* |
Multiplication | Left to right |
/ |
Division | ||
% |
Modulus | ||
4 |
+ |
Addtion | Left to right |
– |
Subtraction | ||
5 |
<< |
Bitwise left shift | Left to right |
>> |
Bitwise right right shift | ||
6 |
< |
Less than | Left to right |
<= |
Less than or equal to | ||
> |
Greater than | ||
>= |
Greater than or equal to | ||
7 |
== |
Equal test | Left to right |
!= |
Not equal to | ||
8 |
& |
Bitwise AND | Left to right |
9 |
^ |
Bitwise exclusive OR | Left to right |
10 |
| |
Bitwise inclusive OR | Left to right |
11 |
&& |
Logical AND | Left to right |
12 |
|| |
Logical inclusive OR | Left to right |
13 |
?: |
Conditional test | Left to right |
14 |
= |
Assigment | Left to right |
+= |
Compound add | ||
-= |
Compound substract | ||
*= |
Compound multiply | ||
/= |
Compound divide | ||
%= |
Compound modulus | ||
<<= |
Compound bitwise left shift | ||
>>= |
Compound bitwise right shift | ||
&= |
Compound bitwise AND | ||
^= |
Compound bitwise exclusive OR | ||
|= |
Compound bitwise inclusive OR | ||
15 |
, |
Sequence point | Left to right |
++ |
Postfix increment | ||
— |
Postfix decrement |
Berdasar table of precedence di atas assignment berlipat banyak dapat dimengerti dengan mudah, misalnya :
A = b = c = d = e = 100;
dalam hal ini assosiativitasnya adalah dari kanan ke kin, jadi 100 dipasangkan di variabel e, lalu dari variabel e ke variabel d demikian seterusnya sampai akhirnya n, sehingga setelah selesai dieksekusi variabel-variabel a, b, c, d, e mempunyai nilai 100. Bahkan kita dapat menulis ekpresi sebagai berikut :
x = 5 + (y = 9 – z);
Order of precedence dari operator dapat di bypass dengan tanda kurung,karena tingkatan precedence dari tanda kurung adalah di atas operator kali, bagi dan modulus sehingga ekpresi tadijika ditulis (2+3)*2 akan menghasilkan 10. Contoh lain adalah :
Contoh program berikut ini menjelaskan pemakaian tanda kurung untuk mencari rata-rata:
//C1_2.CPP
#include <iostream.h>
#include <iomanip.h>
main()
{
float nilai_1, nilai_2, nilai_3, rata2;
nilai_1 = 85.0;
nilai_2 = 80.0;
nilai_3 = 75.0;
// rata2 = nilai_1 + nilai_2 + nilai_3 / 3.0;
/* Perhatikan tanda kurung diperlukan untuk mengubah
order of precedence supaya rata-ratanya benar */
rata2 = (nilai_1 + nilai_2 + nilai_3) / 3.0;
cout << “Rata-rata nilai adalah : ” << setprecision(2) << rata2;
return 0;
}
Operator-operator aritmatik ini dapat digabungkan untuk membentuk operator gabungan (compound operator). Dari tabel of precedence tampak bahwa tingkatan precedence dari operator gabungan ini rendah sehingga pada suatu ekpresi yang mengandung banyak operator, operator gabungan ini pada umumnya dievaluasi pada saat-saat akhir. Contoh pemakaian operator gabungan:
Operator |
Contoh |
Ekivalen |
+= | bonus += 500; | bonus = bonus + 500; |
-= | budget -= 50; | budget = budget •- 50; |
*= | gaji *= 1.2; | gaji=gaji * 1.2; |
/= | faktor/= 50; | faktor= faktor/.50; |
%= | jml_hari %=7; | jml_hari =jml_hari % 7; |
Contoh program berikut ini akan memperjelas pengertian mengenai operator gabungan dan tingkatan precedence nya.
// C2_2.CPP
#include <iostream.h>
main()
{
int i = 4;
int j = 8;
int k = 12;
int jwb;
jwb = I + j;
cout << jwb << “\n”; //12
jwb += k;
cout << jwb << “\n”; //24
jwb /= 3;
cout << jwb << “\n”; //8
jwb -= 5;
cout << jwb << “\n”; //3
jwb *= 2;
cout << jwb << “\n”; //6
jwb %= 4;
cout << jwb << “\n”; //2
// Order of precedence berpengaruh
jwb *= 5+3;
cout << jwb << “\n”; //16
jwb += 4-2;
cout << jwb << “\n”; //18
return 0;
}
Pada suatu ekpresi dalam C++ tipe data tidak harus sama. Kalau suatu bilangan bulat ditambah dengan suatu bilangan pecahan maka C++ akan mengkonversi tipe yang lebih kecil ke tipe yang lebih besar. Konversi ini, yang hanya bersifat sementara pada saat ekpresi dievalusi saja, pada umumnya akan memberikan hasil yang lebih teliti. Jika konversi dilakukan sebaliknya maka terjadi pemotongan pada tipe data yang lebih besar sehingga mengurangi ketelitian. Konversi yang bersifat otomatis ini dapat di bypass dengan type casting, yaitu kita memaksa compiler untuk mengkonversi menjadi tipe data yang kita inginkan. Tipe data yang di type cast ini berubah menjadi tipe baru hanya pada saat ekpresi dievaluasi, jadi sifatnya sementara. Format dari suatu type cast adalah:
(tipe data) ekspresi
dalam hal ini tipe data adalah tipe data yang ada di C++, dan ekspresi dapat berupa variabel, konstanta atau kombinasinya. Program berikut ini memakai suatu type cast untuk menghitung bunga pinjaman.
// C3_2.CPP
#include <iostream.h>
#include <iomanip.h>
main ()
{
int jml_hari =45;
float jml_pinjaman = 2000000.00;
float bunga_tahunan =0.155;
float bunga_harian, bunga_pinjaman;
// Type cast jumlah hari dalam 1 tahun menjadi tipe float
bunga_harian = bunga_tahunan / (float)365;
//Karena jml_hari adalah integer, konversikan menjadi float
bunga_pinjaman =jml_pinjaman * bunga_harian * (float)jml_hari;
jml_pinjaman += bunga_pinjaman;
cout << “Total liutang anda adalah ”
<< setioflags(ios::fixed) << setprecision(2)
<<jml_pinjaman;
return 0;
}