컴퓨터구조와 운영체제

3. 0과 1로 숫자를 표현하는 방법

waterclean101 2023. 11. 3. 09:17

0과 1로 숫자를 표현하는 방법

 

컴퓨터는 기본적으로 0과 1밖에는 이해하지 못한다. 그렇다면 1보다 큰 수를 어떻게 이해할 수가 있을까에 대한 이야기.

컴퓨터가 이해하는 정보 단위

  • 컴퓨터가 이해하는 가장 작은 정보 단위를 비트라고 한다. 즉, 0과 1을 표현할 수 있는 가장 작은 정보 단위가 비트이다.

  • n비트로 2의 n제곱 가지의 정보 표현이 가능하다. (1비트는 두 가지, 2비트는 네 가지, 3비트는 여덟 가지 …)
  • 컴퓨터는 기본적으로 0과 1 밖에는 이해하지 못하기 때문에 모든 수많은 비트로 이루어져 있다. 웹 브라우저, 게임 포토샵 등 프로그램도 결국 수많은 비트 수많은 0과 1로 이루어져 있다.
  • 다만 평소 파일의 크기를 이야기할 때 ‘비트’라는 단위를 흔히 사용하지는 않고 비트보다 더 큰 단위를 사용한다. 바이트, 킬로바이트, 메가바이트, 기가바이트, 테라바이트 등..

워드(word)

  • CPU가 한 번에 처리할 수 있는 정보의 크기를 의미한다.
    • CPU가 한 번에 32비트씩 처리할 수 있다면 그 CPU의 1워드는 32비트.
    • CPU가 한 번에 64비트씩 처리할 수 있으면 그 CPU는 1워드 크기가 64비트.
  • 하프 워드(half word): 워드의 절반 크기
  • 풀 워드(full word): 워드 크기
  • 더블 워드(double word): 워드의 두 배 크기

 

이진법과 컴퓨터

  • 데이터 저장: 컴퓨터는 모든 데이터를 이진수로 저장한다. 예를 들어, 텍스트, 이미지, 소리 등 모든 형태의 데이터가 이진 코드로 변환되어 처리된다.
  • 논리 연산: 컴퓨터는 이진법을 사용하여 논리 연산을 수행한다. 이는 AND, OR, NOT, XOR 등의 기본 논리 게이트를 통해 이루어진다.
  • 프로그래밍: 저수준 프로그래밍 언어, 특히 어셈블리 언어나 기계어는 이진법에 가까운 형태로 작성된다.

 

이진법: 0과 1로 숫자 표현하기

  • 이진법: 0과 1만으로 숫자를 표현하는 방법을 이진법이라고 한다.
  • 자리값: 이진법에서 오른쪽에서 왼쪽으로 갈수록 자리값이 2의 거듭제곱만큼 증가한다.
  • 자리 올림: 이진법에서는 1 다음에 바로 자리 올림이 발생한다. 즉, 1에 1을 더하면 10이 되며, 이는 십진법의 '2'에 해당한다.

 

음수 표현하기

컴퓨터는 마이너스 부호를 기본적으로 인식하지 않기 때문에 0과 1만으로 음수를 표현해야 한다

  • 2의 보수법: 어떤 수를 그보다 큰 2의 n제곱에서 뺀 값.
  • ex) -11(2)를 2의 보수법을 통해 0과 1로 표현한다면 11보다 큰 2의 n은 100. 100에서 11을 빼면 01.
  • 쉽게 구하는 법: 모든 0과 1을 뒤집고 1을 더하기. 즉 11 → 00 → 01

그러나 11을 뒤집은 01이 그대로 양수 01인지, 11의 음수 01인지 구분할 수 없다. 컴퓨터는 이를 위해 '플래그'라는 특별한 지시자를 사용한다. 플래그는 컴퓨터가 어떤 일을 했을 때 그 결과를 기억하는 작은 불빛 같은 것이다. 이 중 'Sign Flag'라는 것이 있다. Sign Flag는 컴퓨터가 수행한 연산의 결과가 음수인지 아닌지를 나타내는 역할을 한다.

  • 만약 연산 결과가 음수라면, Sign Flag는 '1'로 설정된다.
  • 결과가 양수거나 0이라면, Sign Flag는 '0'으로 설정된다.

이진법을 통해 컴퓨터가 이해하는 0과 1만으로 숫자를 표현할 수 있게 되었긴 하지만 사람이 읽기에는 숫자에 길이가 너무 길어진다는 문제가 있다.

 

십육진법

그래서 컴퓨터의 데이터를 표현할 때 십육진법도 많이 사용한다.

  • 십육진법, 또는 헥사데시멀(hexadecimal)은 16을 기반으로 하는 수 체계다. 이진수(binary)가 2개의 기호(0과 1)를 사용하는 것과 달리, 16진수는 16개의 기호(0부터 9까지의 숫자와 A부터 F까지의 알파벳)를 사용한다.

  • 십육진법을 쉽게 아는 팁

 

  • 16진수의 표기법: 숫자 뒤에 작게 (16) or 숫자 앞의 0x
  • 2진수와의 호환성: 16진수는 이진수와 매우 호환성이 좋다. 2진수의 각 4비트는 정확히 하나의 16진수 숫자로 대응된다. 예를 들어, 2진수 **1010**은 16진수로 **A**다. 이런 대응 관계는 2진수를 16진수로, 그리고 그 반대로 변환하기 매우 쉽게 만들어준다.

16진수 → 2진수 변환은 각 숫자를 그냥 2진수 4비트라고 생각하고 각각을 떼어내서 2진수로 변환한 뒤 붙여버리면 2진수가 된다.

2진수 → 16진수 반대로 2진수 4개(4비트)를 하나의 16진수로 바꾸어 붙이면 된다.