관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

데이터 1 - 0과 1로 숫자를 표현하는 방법 본문

알고리즘 및 자료 관리/컴퓨터 구조 & 운영체제

데이터 1 - 0과 1로 숫자를 표현하는 방법

huenuri 2024. 10. 14. 17:48

이번 시간부터는 컴퓨터가 이해하는 정보의 단위를 학습하고, 2진법과 16진법을 통해 다양한 숫자를 표현하는 방법을 학습해 볼 것이다.

정말 어떤 수업일지 기대가 된다.

 

컴퓨터는 0과 1로 모든 정보를 표현하고, 0과 0로 표현된 정보만을 이해할 수 있다. 그런데 어떻게 0보다 큰 숫자를 계산하고 표현할 수 있을까? 이에 대한 답을 찾기 위해 컴퓨터가 표현하는 정보 단위를 학습하고, 0과 1만으로 숫자를 표현하는 방법을 배워볼 것이다.


 

 

 

정보 단위

비트는 전구에 빗대어 생각해보면 이해하기 쉽다. 1비트로는 0 또는 1, 두 가지 정보를 표현할 수 있다.

 

 

 

 

2비트로는 4개의 정보를, 3비트로는 8개의 정보를 표현할 수 있다.

 

 

 


 

 

1바이트를 1000개 묶은 단위를 1킬로바이트라고 한다. 이런 식으로 각각 천 개씩 단위가 올라간다. 1024씩 묶은 단위는 따로 있기에 1024씩 묶어 표현하는 것은 잘못된 관습이다. 과거에는 다루는 정보의 크기가 별로 크지 않아서 혼용해서 사용해도 별 문제가 되지 않았다.

하지만 지금은 다루는 단위가 워낙 크다보니 사소한 차이가 큰 정보의 차이로 이어지게 된다. 그렇기에 지금은 이 둘을 구분해서 쓰는 추세이다.

 

 

 

만약 CPU가 한번에 16비트를 처리할 수 있다면 1워드는 16비트가 되고, 한 번에 32비트를 처리할 수 있다면 1워드는 32비트가 된다. 워드 크기가 큰 CPU는 한 번에 처리할 수 있는 데이터가 많다. 워드 크기는 CPU마다 다르지만 현대 컴퓨터의 워드 크기는 대부분 32비트 또는 64비트이다.


 

 

 

 

이진법

 

 

 

 

 

 

십진수 8을 컴퓨터에게 알려주면 이진수로 표현한 1000을 알려주면 된다.

 

 

어떤 진수인지 알 수 없으니 2진수를 표현할 때는 이처럼 아래첨자를 붙이거나 이진수앞에 0b를 붙인다. 전자는 수학적으로 표기할 때, 후자는 코드 상에서 표기할 때 사용한다.


 

 

 

 

이진수의 음수 표현

 

컴퓨터는 0과 1만 이해할 수 있기 때문에 마이너스 부호를 사용하지 않고 0과 1만으로 음수를 표현해야 한다. 0과 1만으로 음수를 표현하는 방법 중 가장 널리 사용되는 방법은 2의 보수를 구해 이 값을 음수로 간주하는 방법이다.

 

 

 

모든 이진수의 0과 1을 뒤집은 수를 1의 보수라고 한다. 거기에 1을 더한 값을 2의 보수라고 한다. 컴퓨터는 이 수를 음수로 간주한다.

 

 

이 값이 진짜 음수인지 확인해보겠다.

 

 

 

실제로 이진수만 봐서는 이게 음수인지 양수인지 구분하기 어렵다. 그래서 컴퓨터 내부에서 어떤 수를 다룰 때는 이 수가 양수인지 음수인지 구분하기 위해 플래그를 사용한다.

 

 

 

플래그는 쉽게 말해 부가 정보이다. 컴퓨터 내부에서 어떤 값을 다룰 때 부가 정보가 필요한 경우 플래그를 사용한다. 컴퓨터 내부에서 숫자들은 '양수' 혹은 '음수'가 적혀 있는 표시를 들고 다니므로 컴퓨터가 부호를 헷갈릴 일은 없다로 생각하면 된다.


 

 

 

 

십육진법

 

 

 

십육진수 A~F 쉽게 이해하는 방법

이해하기 좋은 팁을 소개한다.

 

따라서 십육진수 D는 13이다.

 

 

 

십육진수로 아래 첨자를 표기하거나 0X를 써서 표시한다. 굳이 왜 십육진법을 사용할까? 여러 가지 이유가 있지만, 십육진법을 사용하는 주된 이유 중 하나는 이진수를 십육진수로, 십육진수를 이진수로 변환하기 쉽기 때문이다.

 

 

위 코드가 무슨 뜻인지는 알 필요는 없다.

 

 

 

십육진수를 이진수로 변환하기

 

십육진수 한 글자를 4비트의 이진수로 간주한다. 16진수를 이루고 있는 각 글자를 따로따로 2진수로 변환하고, 그것들을 그대로 이어 붙이면 16진수가 2진수로 변환된다.

 

 

 

 

이진수를 십육진수로 변환하기

 

반대로 2진수를 16진수로 변환할 때는 2진수를 4개씩 끊고, 끊어 준 4개의 숫자를 하나의 16진수로 변환한 뒤 그대로 이어 붙이면 된다.


 

 

 

단원 마무리하기

 

 

 

 

 

문제를 모두 맞힌 걸 보니 이번 단원 학습을 아주 잘했음을 느꼈다. 많이 부족하다고 생각했는데 지금 잘하고 있다고 생각하기로 했다.


 

 

 

학습을 마치고

오늘 오후에 기획 발표가 있는 것을 깜빡 잊었다. 난 팀 프로젝트를 하지 않기 때문에 발표회에 참여하고 싶지 않았지만 억지로 자리에 앉아있었다. 가서 공부도 하지 못했고 잠만 자다가 와서 마음이 정말 안 좋았다.

그리고 5시가 다 되어서 발표회가 끝나서 교실로 돌아와 나머지 공부를 진행해 본다. 3시간이나 공부를 하지 못해서 아쉽기도 하지만 일정상 어쩔 수 없었다.

 

이 단원도 쉽지 않은 단원이었다. 그래도 십진수와 이진수, 십육 진수에 대해서 학습해 볼 수 있는 좋은 시간이었다.