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는 자연수)

이런것도 되고..

 

...꺄울...

블로그 이미지

J.Min

본진은 페이스북입니다만 긴 호흡의 글을 쓸 필요가 생기네요.

,