이 강좌는 널널한 개발자님의 강의를 기반으로 작성한 글입니다.
CPU가 곱하고 나누는 방법
컴퓨터가 곱셈 하는 방법
곱셈은 여러번 더하면 되긴 하지만 이 방법은 너무 비효율적이라 다른 메커니즘(shift 연산)을 이용하게 된다. 아래 내용을 살펴보자.
- 4비트로 5를 표현하면 0101 이다.
- 4비트 0101을 왼쪽으로 한 칸 씩 밀면(Shift) 1010이다.
- 맨 오른쪽에 0이 채워진다. (Padding)
- 4비트로 표현하는 2진수 1010은 10이다.
- 왼쪽으로한칸밀면곱하기 2, 두 칸 밀면 곱하기 4가 된다.
![](https://velog.velcdn.com/images/bini/post/7b3c4996-edea-4eb4-92e2-efd917db9eb4/image.png)
컴퓨터가 나눗셈 하는 방법
나눗셈은 여러번 빼면 되긴 하지만 이 방법은 너무 비효율적이라 다른 메커니즘(shift 연산)을 이용하게 된다. 아래 내용을 살펴보자.
- 4비트로 6를 표현하면 0110이다.
- 4비트 0110을 오른쪽으로 한 칸씩 밀면 0011이다.
- 맨 왼쪽에 0이 채워진다. (Padding)
- 4비트로 표현하는 2진수 0011은 3이다.
- 7을 0을 나누면?
- 7에서 0을 빼면 7이고 7은 0보다 크다.
- 7에서 0을 계속 빼면 언젠 가는 0보다 작은 숫자를 만 날 수 있는가?
- 만날 수 없다면 뺄셈 연산은 언제 끝날까?
-> 이런 연산을 하게 되면 보통의 CPU에서는 에러가 발생한다. 하자만 ATMEGA128같은 CPU에서는 연산을 무한정하게 됨으로 연산할때마다 열에너지가 발생하고 결국 폭발하게 된다. 그걸 시연한 분이 있는데 아래 동영상 링크로 남겨보겠다.
![](https://velog.velcdn.com/images/bini/post/934e8c41-e510-4a8d-aa8f-f738576cfc63/image.png)
나눗셈 링크