티스토리 뷰

Study/Architecture

[Data] 2`s complement encoding

생각많은 소심남 2015. 9. 6. 23:29

계속 encoding에 대한 이야기를 하고 있고, 이전 포스트에서는 정보의 표현량이 정해져 있는 기법인 Fixed Length Encoding에 대해서 간단하게 언급해봤다.

거기서 마지막에 다뤘던 내용중에 하나가 일종의 이진법의 형식으로 정보가 표현되는 꼴이라는 이야기도 했었다.


그러면 이런걸 처음 접해보는 사람에게는 궁금한게 생길 수 있다. 이 세상의 수에는 소수도 있고, 음수도 있는데 이런 정보는 과연 이런 0과 1로 어떻게 표현하냐는데 대한 것이다. 일단 이번 포스트에서는 음수 표현법에 대해서 다뤄보고자 한다.

 우선 음수를 표현하기 위해서는 이진법 표현 규격중에 signed magnitude representation 이라는 방법을 사용한다. Signed 라는 단어에 들어있는 뜻은 "부호가 있는" 이라는 것인데 말그대로 부호를 표현해주는 bit을 따로 설정해서 이값을 통해서 음수를 표현한다.(참고로 unsigned 라고 해서 부호 없이 값을 표현하는 방식도 존재한다.)


위와 같이 N bit이라고 정보 표현량이 정해져 있을때, 최상위 bit을 sign bit이라고 정의한다. 그래서 해당 bit이 0이면 양수, 1이면 음수를 나타내게 되는데 위의 예시는 -2000을 표현한 값이 된다. 그런데 아마 이진법을 공부한 사람이라면, 범위가 뭔가 좀 이상하게 되어 있는 것을 알 수 있을 것이다. 그도 그럴 것이 지금 언급하고 있는 것은 단순히 최상위 bit을 부호만 표현해주는 방식이기 때문이다. 아마 범위가 이상하다고 생각한 사람들이 알고 있는 것은 후에 언급할 2`s complement encoding일 것이다. 아무튼 위의 방식은 문제가 있다. 최상위 bit을 그냥 부호 표현으로만 쓰다보니까 중간에 한 값이 이상하게 표현된다. 바로 +0과 -0 이다. 이게 극한이 걸린것도 아니고 100000000이나 000000000 이 다르게 표현되는 건 오해의 소지가 발생할 수 있는 부분이 생기는 것이다. 이 때문에 최상위 bit에도 weight를 줘서 계산하는 방식을 주로 사용하는데 이게 바로 2`s complement encoding이다. 

위와 같이 이진법의 표현방식형태로 구분짓다가 최상위 bit에서도 똑같은 방식으로 표현하면 -2^(n-1)이 되는 것을 알 수 있고, 범위도 위와 같이 표현이 된다.

2`s complement에서도 신경써야 할 부분이 바로 arithmetic 부분이다. 수를 다 더하고 빼는 건 좋은데 만약 이런 케이스는 어떨까?


다 1인 값에다가 1을 더하게 되면 이진법 연산에 따라서 다 0이 되는 형태를 띄게 된다. 보통 이런 때는 외부에 따로 flag등을 두어서 표현하곤 한다. 일반적으로 CPU내에서도 이런 연산이 많이 이뤄지는데 CPU내에는 이런 연산이 수행될때 따로 그 상태를 표현해주는 status register가 존재한다. 이럴 경우에는 overflow가 발생한 경우이므로 status register 중 overflow에 해당하는 bit이 1로 set이 된다. 

 자 그럼 반대로 덧셈을 했으니까 뺄셈은 어떻게 하냐에 대한 의문을 가질 수 있다. 우선 컴퓨터의 내부연산 모듈에는 adder라는 뭔가를 더해주는 기능을 하는게 있고, 따로 뭔가를 빼주는 기능을 하는 건 없다. 그럼 이 더해주는 모듈을 이용해서 뺄셈을 해야되는데, 이럴때 위에서 언급한 2`s complement 규칙을 활용하게 되는 것이다. 양수를 음수로 표현하는 것! 방법은 쉽다. 

2`s complement에서 최상위 bit이 sign bit인데, 이게 0이면 그냥 0이고 1이면 -2^(n-1)을 표현한다고 했다. 그러면 양수를 음수로, 혹은 음수를 양수로 표현하고자하면 최상위 bit을 바꿔주고 거기에 뭔가를 더해주면 되지 않을까? 그 과정이 위 그림에서 언급되어 있는 과정이다. 간단하게 표현하면 전체 bit을 negate, 즉 0->1로, 1->0으로 변환하고 거기에 1을 더해주게 되면, 원하는 음수값을 구할 수 있게 된다. 이게 일반적으로 2`s complement encoding에서 언급되는 내용 중 일부다.


출처: 6.004.1x Computation Structures - Part 1: Digital Circuits


'Study > Architecture' 카테고리의 다른 글

[Data] Error Correction  (0) 2015.09.10
[Data] Huffman`s Algorithm  (0) 2015.09.07
[Data] Variable Length Encoding  (1) 2015.09.07
[Data] Fixed Length Encoding  (0) 2015.09.06
[Data] Encoding  (0) 2015.09.03
[Data] Entropy  (0) 2015.09.03
[Data] Quantifying Information  (0) 2015.09.03
댓글