Wednesday, April 29, 2009

Menukar dua buah nilai tanpa menggunakan temporary variabel dengan bahasa C

Untuk menukarkan dua nilai dengan bahasa C tanpa menggunakan variabel sementara, dapat dilakukan dengan memakai operator bitwise Exclusive-OR sebanyak tiga buah. Lihat kode di bawah ini:




#include <stdio.h>

int main(int argc, char *argv[])
{
int a;
int b;

a = 16;
b = 30;

printf("a=%d b=%d\n", a,b);
a ^= b;
b ^= a;
a ^= b;
printf("a=%d b=%d\n",a,b);

return 0;
}





kode di atas setelah di kompilasi akan menukarkan nilai a dengan nilai b, dimana nilai a = 16 dan nilai b = 30 akan ditukarkan menjadi a = 30 dan b = 16.

Bagaimana cara kerjanya?
Nilai a akan di-XOR-kan dengan nilai b, lalu hasilnya disimpan di a, kemudian nilai b di-XOR-kan dengan nilai a yang telah diubah, ini akan menghasilkan nilai a sebelum diubah lalu nilai ini disimpan ke b. Akhirnya nilai a di-XOR-kan kembali dengan nilai b yang telah diubah, ini akan menghasilkan nilai b sebelum terjadi perubahan.


Ini penjelasannya secara lebih sistematis:

a = 16 desimal --> 10 heksadesimal --> 0001 0000 biner
b = 30 desimal --> 1E heksadesimal --> 0001 1110 biner

pada statement a ^= b dilakukan peng-XOR-an a dengan b:

0001 0000 --> a
0001 1110 --> b
---------- XOR
0000 1110 --> a

hasil peng-XOR-an berupa 0000 1110 disimpan di a,

pada statement b ^= a dilakukan peng-XOR-an b dengan a:

0001 1110 --> b
0000 1110 --> a
---------- XOR
0001 0000 --> b

hasil peng-XOR-an berupa 0001 0000 (16 desimal) disimpan di b,

pada statement a ^= b dilakukan peng-XOR-an b dengan a:

0000 1110 --> a
0001 0000 --> b
---------- XOR
0001 1110 --> a

hasil peng-XOR-an berupa 0001 1110 (30 desimal) disimpan di a.

Sehingga hasil akhirnya berupa;
a = 30 dan b = 16.





Selamat mencoba :).

0 komentar: