<aside> 💡 목차


</aside>

연산

<aside> 💡 덧셈과 뺄셈을 어떻게 표현할것인가?


곱셈과 나눗셈을 어떻게 처리할것인가?


부동 소수점에서 어느정도의 실수까지 표현할 것인가?


오버플로우는 어떻게 처리할것인가?

</aside>

<aside> 💡 ISA는 산술논리연산을 지원함


</aside>

→ 예시) 정수 ADD

<aside> 💡 Full Adder쓰면 해결 된다


캐리비트 생기면 캐리비트도 full adder로 만들어서 올림수끼리 더한다

캐리비트 생기면 캐리비트도 full adder로 만들어서 올림수끼리 더한다

</aside>

→ 예시) 정수 SUB / 2의 보수 왜씀? 🔥🔥🔥

<aside> 💡 2의 보수를 생각하자


Untitled

<aside> 💡 근데 2의 보수 왜씀?


컴퓨터의 문제는 항상 서로다른 n개의 공간을 어떻게 2진값으로 표현할것인가에 있다


Unsigned int 로 표현하면 단순 대응관계임

4비트 4자리 가지고 unsigned int로 4를 표현하면 0000 ~ 1111 해서 F(15) 까지 표현 가능

0 0 0
0 1 1
1 0 2
1 1 3

Signed int (MSB)로 표현하면 비효율적임

0 0 +0
0 1 +1
1 0 -0
1 1 +1

→ 3개의 범위밖에 표현을 못함

→ 1110(-6) 에서 0001 을 더하면 1111(-7) 이 되는 문제가…! -5가 되어야 하는데!

→ 양수쪽에 add는 정상작동하는디, 음수쪽은 문제가 많다


1의 보수법의 -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의 보수법

왜 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 범위까지 표현 가능!

즉, 16가지 표현할 수 있다!!

그리고 그냥 더하기(full adder) 써도 값이 멀~쩡함 ㅋㅋ


ADD ADDU 양수로 볼거냐 음수로 볼거냐 차이

음수가 없는 양수로 보면 1110 은 12지만,

음수가 있는 양수로 보면 1110 은 -2 다…

</aside>

다음 설명을 도표로 정리하면 다음과 같다

다음 설명을 도표로 정리하면 다음과 같다

</aside>

→ 예시) 정수 MULTIPLE

<aside> 💡 1. 자리수마다 값을 곱한다

</aside>

→ 부동 소수점 연산 (FP라 이 수업에서 안다룸)