Operator C/C++ P2

2.    Increment/decrement operators, and side effects

Increment dan decrement
Increment (tambah dengan 1) dan decrement (kurangkan dengan 1). Sebenarnya ada 2 versi untuk masing-masing operator yaitu prefix version dan postfix version.


Contoh:

int x = 5;
int y = ++x; // nilai x sekarang adalah 6 dan disimpan pada variable y

Operator postfix increment/decrement sedikit lebih mempunyai trik, compiler membuat copian sementara untuk x, increment dan kemudian menjumlahkannya.

int x = 5;
int y = x++; // nilai x sekarang adalah 6 dan nilai 5 disimpan pada variable y

Pada contoh diatas baris kedua, x di increment dari 5 menjadi 6, akan tetapi nilai yang disimpan ke variable y adalah 5.



Side effects

Side effect adalah suatu hasil untuk operator, ekspresi, pernyataan ataupun fungsi yang tetap bertahan setelah operator, ekspresi, pernyataan ataupun fungsi telah selesai dijalan. 

Side effects sangat bermanfaat:

x = 5;

Tugas operator mempunyai side effect merubah nilai x menjadi permanen/tetap setelah pernyataan selesai dijalankan, x akan bernilai 5.

Side effects dapat juga mejadi bahaya:

int x = 5;
int nValue = Add(x, ++x);

C++ tidak bisa menetapkan perintah fungsi parameter yang akan dijalankan terlebih dahulu, jika parameter kiri (x) yang dijalankan terlebih dahulu, ini akan menjadi Add(5, 6) dan hasilnya adalah 11, Tapi jika parameter kanan (++x) yang dijalankan terlebih dahulu, ini akan menjadi Add(6, 6) dan hasilnya adalah 12 !.



3.    Sizeof, comma, and arithmetic if operators 

Sizeof

Sizeof operator mengembalikan ukuran dalam byte untuk tipe atau variabel.

Contoh dalam C++:
#include <iostream>

int main()
   using namespace std;
   cout << "bool:\t\t" << sizeof(bool) << " bytes" << endl;
   cout << "char:\t\t" << sizeof(char) << " bytes" << endl;
   cout << "wchar_t:\t" << sizeof(wchar_t) << " bytes" << endl;
   cout << "short:\t\t" << sizeof(short) << " bytes" << endl;
   cout << "int:\t\t" << sizeof(int) << " bytes" << endl;
   cout << "long:\t\t" << sizeof(long) << " bytes" << endl;
   cout << "float:\t\t" << sizeof(float) << " bytes" << endl;
   cout << "double:\t\t" << sizeof(double) << " bytes" << endl;
   cout << "long double:\t" << sizeof(long double) << " bytes" << endl;
    return 0;
}

Ouput yang dihasilkan dari author’s Pentium 4 machine, menggunakan using Visual Studio 2005 Express:

bool:           1 bytes
char:           1 bytes
wchar_t:        2 bytes
short:          2 bytes
int:            4 bytes
long:           4 bytes
float:          4 bytes
double:         8 bytes
long double:    8 bytes

cat:
Hasil output akan berbeda jika menggunakan machine atau compiler yang berbeda.



Comma
Operator comma mengizinkan kita untuk menilai/menjalankan banyak ekspresi.

Contoh:
int x = 0;
int y = 2;
int z = (++x, ++y); // increment x dan y

z akan mempunyai hasil dari ++y samadengan 3.


Bagaimanapun, dalam kebanyakan kasus sebuah pernyataan ditulis dengan menggunakan comma akan lebih baik ditulis sebagai pernyataan terpisah.

Contoh:

int x = 0;
int y = 2;
++x;
++y;
int z = y;

Kebanyakan programmer tidak menggunakan operator comma sepenuhnya, akan tetapi untuk single exception pada for loops operator comma dibutuhkan.


Contoh:
for (int iii = 1, jjj = 10; iii <= 10; iii++, jjj--)

Variabel iii akan mencacah naik dari 1 sampai 10, selama variable jjj akan mencacah mundur dari 10 sampai 1. Setiap perulangan, iii akan di increment dan jjj akan di decrement.


Arithmetic if
Operator arithmetic if (?:) juga diketahui sebagai operator kondisi dan pada C++ hanya operator tenary (menggunakan 3 operand). Operator ?: menyediakan metode yang singkat untuk melakukan if/else statement.


Bentuk If/else statement: 

if (condition) 
x = some value 
else 
x = some other value 


Dapat ditulis: 



x = (condition) ? some value : some other value; 
Contoh, Meletakan nilai terbesar x dan y pada variable z, dapat ditulis: 



if (x > y) 
z = x; 
else 
z = y; 

atau 

z = (x > y) ? x : y; 



Pada umumnya menempatkan bagian ekspresi kondisi berada dalam tanda kurung, untuk membuat terlihat lebih mudah dibaca dan juga untuk memberikan hak yang lebih tinggi. 



Perlu diingat, operator ?: mempunyai hak yang sangat rendah. Jika melakukan apa pun selain menggunakan hasilnya dalam sebuah pernyataan penugasan (yang memiliki hak lebih rendah) pernyataan ?: harus diletakan didalam tanda kurung. 



Contoh menampilkan nilai yang terbesar dari x dan y dalam C++, 



if (x > y) 
cout << x; 
else 
cout << y; 

atau 

cout << ((x > y) ? x : y); 



Karena operator << operator memiliki hak yang lebih tinggi dari operator ?, maka pernyataannya adalah : 


cout << (x > y) ? x : y; 


dapat juga ditulis : 


(cout << (x > y)) ? x : y; 


Ini akan menampilkan 1 (jika benar) if x > y, atau 0 (jika salah) 



arithmetic if memberi kita cara mudah untuk menyederhanakan pernyataan if /else. arithmetic if tidak boleh digunakan untuk pernyataan if /else yang komplek, karena sulit dibaca dan rawan kesalahan.








bersambung....

0 komentar:

Posting Komentar

Followers

Total dilihat

Diberdayakan oleh Blogger.

online log book

Cari Blog Ini