Akademisyenler öncülüğünde matematik/fizik/bilgisayar bilimleri soru cevap platformu
1 beğenilme 0 beğenilmeme
987 kez görüntülendi

Diyelim iki değişkeniniz var:

int a,b;

Programın çalışması sırasında bunlar bazı değerler alıyor. Ama programın bir yerinde, diyelim ki a'daki değeri b'ye, b'deki değeri a'ya yazmak istiyorsunuz. Bunun mesela bir yolu şu:

int c;

c=a;
a=b;
b=c;

Ama burada üçüncü bir değişken kullandık. Bunu kullanmadan a ve b nin değerlerini değiştirebilir misiniz?

Veri Bilimi kategorisinde (236 puan) tarafından  | 987 kez görüntülendi
a=a+b;

b=ab;

a=ab;
tatlı ,minik bir soru :)

bu yontem dogru olsa da sadece int tipinde olan degiskenlerde calisma garantisi var. Toplama ve cikarma yerine xor kullanirsaniz her turlu degisken icin kullanabilirsiniz

hocam XOR  bit operatöründen emin miyiz ?
evet XOR bit operatoru bu islem icin is gorur.
Operatörün işlevini biliyorumda,dümdüz bakınca kestirmek zor.Açıklama eklerseniz bence daha kaliteli cevap olur

(ab)c=a(bc)

(ab)=(ba)

aa=0

a0=a

ilk basta elimizde a ve b var. a yi ab ye esitleyelim. Daha sonra b yi ab ye esitleyelim. yani b=abb=a. Daha sonra a yi yeniden ab ye esitlersek (yada baska bir degisle aba) elimize b gelir.
C kodunda gostermek gerekirse

#include <stdlib.h>
#include <stdio.h>

void degistir(int* a, int* b)
{
  
    *a = *a ^ *b; // a = a xor b
    *b = *a ^ *b; // b = a xor b xor b = a
    *a = *a ^ *b; // a = a xor b xor a = b
}

int main(){
  float a = 3.14;
  float b = 2.71;
  
  printf("a : %f , b : %f \n",a,b);

  degistir((int*)&a,(int*)&b); // fonksiyonumuz int* bekliyor o yuzden ilk basta float olan
                               // degiskenimizin adresini & operatoru ile alip (int*) ile int* 
                               // tipine donusturuyoruz

  printf("a : %f , b : %f \n",a,b);
}

 

1 cevap

2 beğenilme 0 beğenilmeme
X := X XOR Y
Y := Y XOR X
X := X XOR Y

 

(1.6k puan) tarafından 
20,297 soru
21,840 cevap
73,541 yorum
2,729,456 kullanıcı