관리 메뉴

어읽로꾸거

[수학] 2의 보수, 1의 보수 (+ 왜 필요한지 이유) 본문

정리

[수학] 2의 보수, 1의 보수 (+ 왜 필요한지 이유)

어읽로꾸거 2022. 9. 4. 23:10

r진법, N은 숫자, n자리수

 

1. r-1의 보수 (2진법의 경우 1의 보수)

r-1의 보수

 r-1의 보수. 2진법과 10진법을 예로 들면 이렇다.

원래 수(2진법) 1의 보수
101101 010010
100001010 011110101
원래 수(10진법) 9의 보수
1234 8765
89023 10976

특징)

1. 원래수와 r-1의 보수의 자리수마다 더하면 r-1이 됨

2. r의 보수(2진법의 경우 2의 보수)

r의 보수(r-1의 보수에서 1더하면 됨)

 r의 보수. 2진법과 10진법을 예로 들면 이렇다.

원래 수(2진법) 2의 보수
101101 010011
100001010 011110110
111000 001000
원래 수(10진법) 10의 보수
1234 8766
89023 10977
123000 877000

r-1의 보수와의 차이점은 1만큼 차이가 난다. 따라서 r-1의 보수에 1을 더해주면 r의 보수가 된다. (직관적인데?)

근데 이게 꼼수 특징이 뭐냐면 뒤에서부터 해서 가장 먼저 0이 아닌숫자를 발견하면 해당 자리 숫자를 더해서 r이 되게 만들고 그 앞의 자리는 r-1이 되게 하면 된다.

예를 들면, 10진법 기준으로 다음과 같다.

이런식으로

이런 방식이 있다. 별로 어려운건 아니니까 그냥 정직하게 r-1의 보수 구해서 1더해줘도 된다.

특징)

1. r-1의 보수에 1을 더해주면 r의 보수가 됨

2. 오른쪽부터 해서 처음으로 0이 아닌게 나오면 그건 더해서 r이 되게, 나머지는 r-1이 되게 해주면 간단

보수를 그래서 왜 배우냐?

1. (Unsigned 에서)뺄셈을 덧셈으로 표현하기

2. 양수 <=> 음수 컴퓨터에서 바꾸기(2진수에서 2의 보수일때만)

우선 (Unsigned 에서)뺄셈을 덧샘으로 바꿔보자

예를 들어 M-N을 한다고 하자. 이때 M + (N의 2의 보수)를 한다고 하자. 그러면

이렇게 바뀜

여기서 2가지 경우로 나뉜다.

1) M >= N인 경우

이때는 r^n을 빼주면 된다. 그러면 그냥 M-N되서 원래 구하려던거 구함

2) M<N인 경우

이때는 좀 복잡하다. 

이렇게 하고

이거 다음에 N-M을 Z라고 치환하자. 그러면

이거는 Z의 2의 보수인데?

Z의 2의 보수가 된다. 보수의 보수는 원래의 수이므로 해당 수에 대해 2의 보수를 취해주면?

원래 구하려던 M-N에 마이너스

원래 구하려던 M-N에 마이너스를 취한 값이 나온다. 그러면 -(M-N)이 나온다.

 

따라서 M+(N의 보수)한 값의 보수를 구한 뒤 마이너스를 붙여주면 된다.

 

아직 미완성