Z/2^nZ에서 {0, 1}^n 공간으로 보내는 함수를 repr([x])라 하면 repr([x])의 representation이고


repr([x]) = repr([y]) = repr(y), 0 <= y < 2^n, 여기서 마지막 repr(y)는 pure binary notation이다


이제 Z/2^nZ을 reinterpretation해서 2^n > x >= 2^(n-1)에 대해 [x]의 representative를 바꿔 2의 보수를 정의한다


[-x] = [2^n - x] = [1] + [(2^n - 1) - x] = [1] + NOT(x) 이므로 음수 비트 연산도 잘 정의할 수 있고


[-2^(n-1)] = [2^(n-1)] 이니 부호 비트를 고려해 이 class를 [-2^(n-1)]라 보는게 공학적으로 좋을 것 같다


기하학적으로 보면 Z/2^nZ는 원이 되고 -x 연산은 (보통 평면에선 원점 대칭이지만) 여기선 x 축 대칭이 되고 (그래서 -x == x 이 성립하는 원소가 두 개임을 직관적으로 이해할 수 있음) 덧셈과 뺄셈은 회전이라고 이해한다


모든 연산이 Z/2^nZ 상에서 잘 정의되고 단지 reinterpretation 한 것 뿐이므로 기존 회로를 수정할 필요 없이 그대로 쓸 수 있다


이상으로 2의 보수는 이상한 개념이라기 보다 매우 자연스런 개념임을 보였다 ㅇㅅㅇ


아래 수학 머시기 보고 생각나서 모두가 아는 쉬운 내용이지만 끄적여봄 ㅇㅅㅇ