본문 바로가기

비전공자 스터디노트

정수를 비트로 표현하는 방법

양의 정수표현

10진수(일상에서 가장 많이 사용)

10000의 자리 1000의 자리 100의 자리 10의 자리 1의 자리

2022는 10진수로 표현하면 2*1000+0*100+2*10+2*1 이다.

 

2진수(=비트를 사용한 값이랑 동일)

2의 4승 자리 2의 3승 자리 2의 2승 자리 2의 1승 자리 2의 0승 자리

2022를 2진수로 표현하면

1*2의10승 + 1*2의9승 + 1*2의8승 + 1*2의7층 + 1*2의6승 + 1*2의5승 + 1*2의2승 + 1*2의1승이다.

비트로 표현하면 총 11비트가 된다.

1 1 1 1 1 1 0 0 1 1 0

 

2진수에서 가장 오른쪽에 있는 비트가장 작은 유효 비트(Least Significant Bit)라고 부르고

가장 왼쪽에 있는 것가장 큰 유효비트(Most Significant Bit)라고 부른다.

 => 가장 오른쪽에 있는 것을 바꾸면 값이 가장 작게 변경되고

      가장 왼쪽에 있는 것을 바꾸면 값이 가장 크게 변경되기 때문!!

 

2진수 덧셈

10진수의 경우에는 합쳤을 때 10이되면 올려서 더하지만

2진수는 합쳤을 때 1보다 크면 1을 다음자리로 올린다.

2진수 덧셈

오버플로

  - 덧셈 결과가 비트의 개수로 표현 할 수 있는 범위를 벗어났을 경우

     즉, MSB에서 올림이 발생했다는 것!

예) 1000 + 1001의 경우 답은 10001이된다. 하지만 4자리 비트이기 때문에 1개가 부족하여 0001가 되는 경우가 있다.

 

언더플로

  - MSB 위쪽에서 1을 빌려오는 경우

 

음수표현

음수와 양수구분을 위해 부호를 사용한다.

부호의 종류는 +, - 가 있다.

 

부호와 크기 표현법

 - 제일 왼쪽에 있는 비트(MSB)가 0이면 양수, 1이면 음수라고 멋대로 결정하는 것

 - 문제점

     1) 0을 표현하는 방법이 2개라서 비트구성에 드는 비용이 낭비된다.

     2) XOR과 AND를 이용한 덧셈계산이 불가능하다.

 

1의보수

  - 양수의 모든 비트를 뒤집는 것

  - NOT 연산을 통해 해결

출처: tcp school

문제점

  1) 0을 두가지 방식으로 표현한다. (0이면 +, 1이면 - 이런식)

  2) 덧셈을 쉽게 할 수 없다.

       => 해결법: MSB를 넘는 올림이 발생했을 때 LSB로 올려줘야 하는 순환올림을 사용하면 되지만 복잡하고

                      순환올림을 처리 할 하드웨어를 추가해야 한다.

   

  +) 순환올림

       0010 + 1110의 결과는 10000인데 4비트 밖에 없기 때문에 MSB를 넘는 1을 LSB로 넘겨줘서 0001로 표현하는 것

 

** 현대 컴퓨터에서는 부호와 크기 표현법이나 1의 보수 표현법은 거의 사용하지 않는다.

 

2의보수

  - +1을 더했을 때 0이 나오는 비트 패턴을 찾고 그걸 -1이라고 하는 것

  예시)

     1을 4비트로 표현하면 0001이다.

     0001에 1111을 더하면 10000이고 2의 보수에서는 MSB의 올림 1을 버린다.

     즉, 0000이 되므로 1111이 -1이되는 것이다.

   

2의 보수로 쉽게 표현하는 방법
  1) 어떤 수의 비트를 구한다.
  2) 그 비트에 NOT을 적용해서 반대로 만든다.
  3) LSB에 1을 더한다.

위의 방법대로 해보면 숫자2를 4비트로 표현하면 0010인데 이걸 NOT을 적용하면 1101이고 여기에 1을 더하면

1110이다. 따라서 -2는 1110이다. 

 

2의 보수에는 0이 1개의 역할만 가지고 있다.

0을 비트로 나타내면 0000이고 NOT을 적용하면 1111이다.

여기에 1을 더하면 10000인데 MSB 올림을 버리므로 0000이 남는다. 

0000은 0과 동일하므로 2의 보수에는 0이 1개의 역할만 가지고 있다.

 

 

비트의 개수가 커지면 표현 할 수 있는 값의 범위가 증가한다. 

같은 숫자라도 표현 방식에 따라 값이 다르게 나올 수 있다. 

반응형