from 강신영 님의 BLog에서.
며칠전에.. 혹은 한참전에 그 글을 읽었던 생각이 났는데,
그때 분명히 C없이도 교환이 가능하다고 어디서 읽었다는 생각이 들었습니다.
오늘 일하다가 갑자기 그 생각이 나더군요..
처음 생각 난 답은 이거였습니다.
A = A xor B
B = A xor B <=A의 값이 들어감
A = A xor B <=B의 값이 들어감
뭐냐..-ㅁ-;;
갑자기 증명을 하고 싶어지더군요.. (--;;;;; )
일단 먼저 로직 테이블을 그렸습니다.
A
0 1
B 0 0 1
1 1 0
흠..이것으로 A xor B의 로직테이블이 그려졌습니다.
저것을 Positive And / Or Logic으로 구현하면 이렇게 됩니다.
A xor B = A&(!B) | (!A)&B
이것은 논리설계시간에 배우는 기초적인 로직 구현법이므로, 믿으셔도 됩니다.
편의를 위해서 & = * 로, | = + 로 쓰겠습니다.
이제 전개를 해 볼까요...
A' = A xor B
B' = A' xor B = (A xor B) xor B
= (A*!B + !A*B) xor B
= (A*!B + !A*B)*!B + !(A*!B + !A*B)*B
//참고로 논리 AND는 수학의 *과, 논리 OR는 수학의 +와 성질이 똑같습니다.
= (A*!B*!B + !A*B*!B) + !(A*!B + !A*B)*B
= (A*!B) + !(A*!B + !A*B)*B
//NOT이 괄호 안으로 들어가면, 각각의 항에 NOT 이 붙고, AND는 OR로, OR은 AND로 바뀌죠...
= (A*!B) + ((!(A*!B)) * (!(!A*B))) * B
= (A*!B) + ((!A+B)*(A+!B)) * B
= (A*!B) + (!A*A + A*B + !A!B + B*!B) * B
= (A*!B) + (A*B + !A!B) * B
= (A*!B) + A*B +
= A*(!B+B)
= A
따라서
(A xor B) xor B = A
(A xor B) xor A = B
... 증명 끝.
...
그러고 나서 자랑스럽게 글을 블로그에 올리려고 보니..
10초만에 떠오른 생각...
"어린이들이 더 잘할지도 모른다..?라?"
......
.....
....
...
..
.
...어린아이들이면, 일단 내꺼네꺼 다 합친다음, 내가가진만큼 네가 가져가고, 네가 가진만큼 내가가져가면 된다고 생각하겠지...?
네가 가진 물건과 내가 가진물건의 합 을 값으로 가지고 있으면
내가 가진 물건의 가격을 알고 있으면 자연스럽게 네가 가진물건의 가격은 식으로 유도가 되겠지?
A+B가 들어갈 메모리공간과
B가 들어갈 메모리 공간만 있으면
A+B에서 A값구하는건 일도 아니잖아!!!!!
....OTL..
따라서
A' = A+B
B' = A'(=A+B) - B = A
A'' = A'(=A+B) - B'(=A) = B
Change.
더군다나, +일경우 값의 보존도 될것 같고.. 어차피 Carry하는건 1자리니까...
나 지금 울고 있냐..--;;;
훨씬 쉬운 사고 방법이..
거기다 조건을 확장시켜서,
A와 B의 메모리 사이즈가 무한하다고 치면,
A' = A*B
B = A'/B
A'' = A'/B
(단 A,B는 자연수)
이런것도 되고..
...꺄울...