요약
0과 1를 다루는 2진법으로 덧셈으로만 연산
0과 1은 스위치 on/off를 말하며, 스위치를 병렬로 두어 조금 더 큰 수를 연산
32bit cpu라면은 전구를 32개 병렬로 두어 연산한다는 의미이고 2^32 이므로 최대 4,294,967,296 숫자만큼 한번에 처리가 가능하다.
2진수를 어떻게 더하나?
논리회로의 조합
기본적인 논리회로(NOT, AND, OR, XOR)를 조합하여, 반가산기와 전가산기를 이용해서 더한다.
전가산기
1bit 단위로 계산한다.
A,B는 input이고 S는 결과, C는 올림 수 이다.
덧셈으로만 가능한 이유
사칙연산은 더하기, 빼기, 곱하기, 나누기로 이루어 진다.
곱하기
곱하기는 n번 더하면 되기에 이해하기 쉽다.
ex) 3 * 5 = 3 + 3 + 3 + 3 + 3
빼기
빼기는 2의 보수(Complement)를 취하고 더하면 된다.
- 2의 보수: 1의 보수 + 1
- 1의 보수는 flip (0 → 1, 1 → 0)
ex) 5 - 3 = 2
5 === 0101
3 === 0011
3의 2의 보수 === 1101
0101 + 1101 = 10010 → 자리 넘어가는건 버리고 0010이니 2가 됨
나누기
나누기는 피제소룰 제소로 여러 번 빼면 된다.
(몫이 0이거나 나누는 대상보다 작을 때 까지 N번 빼면 된다. N이 몫)
0으로 나누면 무한루프가 걸리기에 아마 0으로 애초에 나눌 순 없게 설계되어 있을 듯
2를 곱하거나 나눌 때
2진수 값을 왼쪽 또는 오른쪽으로 그대로 shift하면 된다.
padding이 존재 시 삭제 한다.
ex) 5 * 2 = 10
0101 → 1010 → 10
6 / 3 = 3
0110 → 0011 → 3
'IT' 카테고리의 다른 글
[컴퓨터 구조] CPU > Program Counter (1) | 2023.10.28 |
---|---|
[운영체제] 인터럽트 (0) | 2023.10.28 |
web > popstate (0) | 2023.09.25 |
[nextjs] router.beforePopState (0) | 2023.09.25 |
CSS > inline, block, inline-block (0) | 2023.08.28 |