Tukar Integer dengan Operator ^

..

Dulu saat masih kuliah, saya sempat menemui tantangan programming semacam ini:

Bagaimana cara melakukan swap/tukar 2 buah integer menggunakan operator ^ ?

Saat itu saya kira yang dimaksud adalah operator pangkat, jadi algoritma yang terpikir di otak saya kira-kira seperti ini:

misal yang akan ditukar adalah variabel a dan b.


a = a^b
b = a^(1/b)
a = ln(a)/ln(b)

Contoh:


a = 20
b = 13

a = 20^13
b = (20^13)^(1/13) = 20
a = ln(20^13)/ln(13) = 13*ln(20)/ln(20) = 13

akhirnya diperoleh a = 13 dan b = 20.

Namun saya agak kurang srek kalau jawabannya memang seperti itu, karena selain operator ^, ternyata dibutuhkan juga operator / dan ln. Algoritmanya juga kurang praktis, serta tidak cocok jika bilangannya besar.

Belakangan ini saya baru tahu bahwa ternyata di sebagian besar bahasa (misal C dan Perl), ^ bukan berarti pangkat, tetapi XOR bitwise. #mindblown 😛

Yang sudah pernah belajar logika, pasti paham maksudnya operator XOR, kira-kira seperti ini:

p q (p XOR q)
0 0 0
0 1 1
1 0 1
1 1 0

Gampangannya, jika beda maka hasilnya 1, dan jika sama hasilnya 0.

Untuk operator ^ dalam programming, berhubung operannya berupa integer, maka dilihat dalam bentuk binary dan setiap bit yang bersesuaian diterapkan operator XOR ini. Contoh:


12^21 = (01100)^(10101)
= (0^1)(1^0)(1^1)(0^0)(0^1)= (1)(1)(0)(0)(1) = (11001) = 25

Dengan operator seperti ini, maka algoritma untuk tukar integer jadi elegan dan sederhana:


a = a^b
b = a^b
a = a^b

//iya, gitu doank : )

Contoh:


a = 20 (00010100)
b = 13 (00001101)

a = (00010100)^(00001101) = (00011001)
b = (00011001)^(00001101) = (00010100) = 20
a = (00011001)^(00010100) = (00001101) = 13

diperoleh a = 13 dan b = 20 🙂

Advertisements

2 comments on “Tukar Integer dengan Operator ^

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s