<aside> 💡 목차
</aside>
<aside> 💡 덧셈과 뺄셈을 어떻게 표현할것인가?
곱셈과 나눗셈을 어떻게 처리할것인가?
부동 소수점에서 어느정도의 실수까지 표현할 것인가?
오버플로우는 어떻게 처리할것인가?
</aside>
<aside> 💡 ISA는 산술논리연산을 지원함
부호 있는 정수 및 부호 없는 정수
실수에 대한 부동 소수점 근사치
제한 범위 및 정밀도
HI 하고 LO에 나눠 저장함오버플로우?
<aside> 💡 메모리는 유한하다
오버플로우는 값이 표현할 수 있는 범위를 넘어서는 경우를 의미합니다.
예를 들어, 32비트 정수에서 2147483647 + 1을 계산하면 32비트를 넘는 값이기에 오버플로우가 발생합니다.
</aside>
</aside>
<aside> 💡 Full Adder쓰면 해결 된다

캐리비트 생기면 캐리비트도 full adder로 만들어서 올림수끼리 더한다
</aside>
<aside> 💡 2의 보수를 생각하자

<aside> 💡 근데 2의 보수 왜씀?
컴퓨터의 문제는 항상 서로다른 n개의 공간을 어떻게 2진값으로 표현할것인가에 있다
4비트 4자리 가지고 unsigned int로 4를 표현하면 0000 ~ 1111 해서 F(15) 까지 표현 가능
| 0 | 0 | 0 |
|---|---|---|
| 0 | 1 | 1 |
| 1 | 0 | 2 |
| 1 | 1 | 3 |
| 0 | 0 | +0 |
|---|---|---|
| 0 | 1 | +1 |
| 1 | 0 | |
| 1 | 1 | +1 |
→ 3개의 범위밖에 표현을 못함
→ 1110(-6) 에서 0001 을 더하면 1111(-7) 이 되는 문제가…! -5가 되어야 하는데!
→ 양수쪽에 add는 정상작동하는디, 음수쪽은 문제가 많다
-0 ’없는 수 문제’0111 (+7)
1000 (-7)
→ 1000 (-7) 에서 0001 (+1) 을 더하면 1001(-6) 오 잘 작동한다!
→ 하지만, 1110(-1) 에서 0001(+1)을 더하면, 1111(-0) 엥? 뭐냐 이거?
→ 1110(-1) 에서 +1 을 해서 +0이 되어야 하는데, 실제 갭은 +2 를 해야하는 문제가 있다.
→ -1 과 +0 사이에 존재하지 않는 수인 -0이 존재하여 오류가 존재함. 이 문제를 해결하기 위해 2의 보수법이 등장함
왜 2의 보수에선 값을 뒤집고 1을 더할까?
→ 0000을 뒤집으면 1111이 됨. 여기서 1을 더하면 다시 0000이 됨
→ 0001 을 뒤집으면 1110 이 됨. 여기서 1을 더하면 1111이 됨
→ 1과 +0 사이에 갭이 하나만 벌어진다
(1의 보수에선 2개가 벌어져서 문제가 있었음)
2의 보수법 4bit로 표현할 수 있는 범위는 +7 ~ -7 즉 15가지인가..?
그냥 Unsigned로 표현하면 16가지인데 2의 보수법이 15개면 이것도 1의보수랑 다를바없는거 아니냐?
→ NO!!! 2의 보수법에서는 1의 보수와 달리 -0이라는 값이 없기때문에, 값을 하나 더 사용할 수 있는데, 1000 값을 사용할 수 있어 +7 ~ -8 범위까지 표현 가능!
그리고 그냥 더하기(full adder) 써도 값이 멀~쩡함 ㅋㅋ
음수가 없는 양수로 보면 1110 은 12지만,
음수가 있는 양수로 보면 1110 은 -2 다…
</aside>

다음 설명을 도표로 정리하면 다음과 같다
</aside>
<aside> 💡 1. 자리수마다 값을 곱한다
</aside>