이 글은 혼자 공부하는 컴퓨터 구조 + 운영체제 (저자 : 강민철)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다.


정보 단위

컴퓨터는 0 또는 1밖에 이해하지 못한다.

0과 1을 나타내는 가장 작은 정보 단위를 비트(bit)라고 한다.

1비트는 0 또는 1을 표현할 수 있고(2가지), 2비트는 00, 01, 10, 11 이렇게 4가지를 표현할 수 있다.

3비트는 000, 001, 010, 011, 100, 101, 110, 111 이렇게 8가지를 표현할 수 있다.

따라서 n비트는 2ⁿ가지를 나타낼 수 있다.

비트 다음으로 큰 정보 단위는 바이트이다.

바이트는 8개의 비트를 묶은 것이다. 즉, 1바이트는 8비트와 같다.

그다음으로 큰 정보단위는 킬로바이트(KB)이다. 1킬로바이트는 1000바이트와 같다.

이후에 나오는 더 큰 정보단위는 이전 단위를 1000개씩 묶은 것과 같다.

 

1KB = 1024byte 아닌가?
마찬가지로 1MB = 1024KB, 1GB = 1024MB... 등으로 표현하는 것은 잘못된 관습이다.
이전 단위를 1024개 묶어 표현한 단위는 Kib, Mib, Gib, Tib이다.

 

워드(word)
워드란 CPU가 한 번에 처리할 수 있는 데이터 크기를 뜻한다.
만약 CPU가 16비트를 처리할 수 있다면, 1워드는 16비트가 된다.
이렇게 정의된 워드의 절반 크기를 하프 워드, 1배 크기를 풀위드, 2배 크기를 더블 워드라고 부른다.
워드 크기가 큰 CPU는 한 번에 처리할 수 있는 데이터가 많다.
워드 크기는 CPU마다 다르지만, 현대 컴퓨터의 워드 크기는 대부분 32비트 또는 64비트이다.
인텔의 x86 CPU는 32비트 워드 CPU, x64 CPU는 64비트 워드 CPU이다.

 


 

이진법

  • 0과 1로 수를 표현하는 방법
  • 숫자가 1을 넘어가는 시점에 자리올림
  • 우리가 일상적으로 사용하는 진법은 숫자가 9를 넘어갈 때 자리올림하는 십진법

 

이진수의 음수 표현방법 (2의 보수)

  • 먼저 1의 보수를 취한다(1과 0 반전하기)
  • 1을 더한다.
  • 이진수 1011을 음수로 만들면, 1011 -> 0100 -> 0101

제대로 구했는지 확인해 보려면 구한 값에 다시 2의 보수를 취하면 된다.

그냥 2진수만 보고 양수인지 음수인지 어떻게 알 수 있나?
컴퓨터 내부에서 어떤 수를 다룰 때, 이 수가 양수인지 음수인지를 구분하기 위해 플래그(flag)를 사용한다.
플래그를 통해서 어떤 이진수가 양수인지 음수인지 알 수 있다.
쉽게 말하자면 컴퓨터 내부의 숫자들은 양수, 또는 음수를 표시하는 방법이 있다는 뜻이다.
프로그래밍 코드에서 2진수 여부를 나타내는 방법
십진수 8을 코드상에 이진수로 나타내면 0b1010으로 나타낸다.

 


 

십육진법

  • 이진법으로 모든 정보를 표현하기엔 숫자가 너무 길어져서 사용
  • 수가 15를 넘어가는 시점에서 자리올림을 함

 

16진수를 2진수로 변환하기

위의 표를 이용하여 16진수 한 글자를 4비트의 이진수로 간주한다.

EX) 16진수 1A2B를 2진수로 변환하면 0001 1010 0010 1011이 된다.


0001 1010 0010 1011은 설명을 위해 4자리씩 끊은 것이다.
실제론 0001101000101011 이렇게 끊지 않고 표현한다.

 

2진수를 16진수로 변환하기

4자리씩 끊고 16진수에 해당하는 수로 바꿔주면 된다.

EX) 이진수 0001101000101011 -> 0001 1010 0010 1011 -> 1A2B

 

프로그래밍 코드에서 16진수 여부를 나타내는 방법
십진수 10을 코드상에 십육진수로 나타내면 0xA로 나타낸다.