티스토리 뷰

오래전부터 사람들은 컴퓨터로 음수를 어떻게 표현할까 고민해왔다. 그래서 나온 제일 대표적인 세 방법!

8-bit unsigned int를 예시로 설명한다. 

1) 부호-절댓값 방식(sign-magnitude)

부호-절댓값 방식은, 8비트 중 제일 왼쪽 1비트를 부호를 표현하는데 쓰고(0: 양수, 1: 음수), 나머지 7비트로 값을 만든다. 

 

장점: 직관적이다

단점:

1) 양수와 음수를 더했을 때, 값이 옳지 않다. 즉, 뺄셈을 할 수 없다. +5랑 -5랑 더하면, (1000 0101 + 0000 0101 = 1000 1010)으로 -10이 된다..!

2) +0, -0이 생긴다. (1000 0000, 0000 0000 둘 다 0이다) -> 숫자 하나를 더 표현할 기회를 낭비한다..!

2) 1의 보수 방식(1's complement)

1의 보수 방식은, 음수는 양수에다가 전체 비트 inverse를 씌우는 방식이다!!

 

장점: 계산이 편하다

단점: 역시 +0, -0이 생긴다. 왜냐면, +5 + -5 = 0000 0101 + 1111 1010 = 1111 1111 이여서, 

0000 0000 = +0, 1111 1111 = -0이다. 이 역시 숫자 하나를 더 표현할 기회를 낭비한다..!

3) 2의 보수 방식(2's complement)

음수는, 양수 비트를 inverse 한 다음 1을 더해서 음수를 만드는 방식이다. 

현대에서는 이 방식을 대부분 사용하고 있다. 

 

-128 ~ 127까지 표현할 수 있다. 

제일 첫번째 비트가 1이면 무조건 음수이다. 

-2^7, 2^6, 2^5,..., 2^0이라고 생각하자. 

 

특징) x'을 x의 inverse bit라고 하면 

x+ x' = -1 

x' + 1 = -x

 

Sign Extension

char에 저장된 음수를 int에다가 옮겨준다면? 24개의 비트가 새로 생긴다. 이 새로 생긴 비트들을 음수면 1로, 양수면 0으로 새로운 비트들을 채워준다. 

 

Overflow

[더하기]

두개의 양수를 더해서 젤 왼쪽의 bit가 1이면 overflow가 난 것이다. 

두 개의 음수를 더해서 젤 왼쪽의 bit가 0이면 overflow가 난 것이다. 

 

[빼기]

양수에서 음수를 뺐는데 젤 왼쪽의 bit가 1이면 overflow가 난 것이다. 

음수에서 양수를 뺐는데 젤 왼쪽의 bit가 0이면 overflow가 난 것이다. 

 

C언어 같은 언어들에서는 overflow를 아예 무시해버리므로 프로그래머가 잘 관리해야 한다..!

 

곱셈

이 그림은 실제로 32bit의 곱셈을 해주는 회로이다!

32bit * 32bit => up to 64bit

 

Optimized Multiplier

이렇게 해도 너무 느려! too expensive! 그래서 만들어진게...

Faster Multiplier

나눗셈

n-bit의 값을 나누면, n-bit의 몫과 나머지가 나온다. 

나눗셈을 할 때는 나눌 숫자와 나머지의 부호가 같아야 한다. 

Optimized Divider

 

Multiplier랑 Divider랑 모양이 같으니까! 사실 하드웨어도 공유해서 쓴다고 한다...

 

Signed Integer에 대해서 Bit Shift로 Divide 하기

 

i bit로 우이동 하면 2^i로 나눠지는건 unsigned integer에만 해당하는 일이다. 

 

음수라서 왼쪽을 1로 채우면 될것같았는데

-5 / 4 해보니까 -2가 나왔다. 틀림..!

 

 

Floating Point 표현하기

IEEE Std 754-1985에서 사용하는 방식이다

 

표준은 지키는게 좋다!

 

두개의 표현 방식이 있는데,

1) Single Precision ( 32-bit ) : float in C

2) Double Precision ( 64-bit ) : double in C

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함