C

비트와 바이트, 16진수

그냥 사람 2020. 9. 14. 13:22

교수님께서는 이 정도는 기본이라는 전제 하에 수업을 하시는 것 같았는데, 난 기본도 제대로 되어 있지 않아서;; 수업을 이해하기가 너무 힘들었다.

int형은 4바이트라는데, 그게 대체 어느 정도 크기지? 4바이트라고 하면 되게 적어 보이는데.... 어떻게 저렇게 큰 숫자까지 표현할 수 있다는 거지...?

16진수는 뭐고 대체 왜 쓰는 거지....?

16진수 표현할 때 앞에 0x는 뭐지...?

뭐 이런 의문들.

c언어 처음 배울 때도 이해가 안 되어서 그냥 대강대강 넘어갔던 부분인데, 이번 기회에 따로 공부해보았다.

 

1. 비트와 바이트

 

비트(bit)

: 2진수 한 자리를 표현할 수 있는 저장 공간

 

8byte=1bit

따라서 1바이트라고 하면 2진수 여덟 자리를 표현할 수 있는 공간이다.

4바이트의 저장 공간을 가지는 int형의 데이터 타입은 8 * 4 = 32자리의 2진수를 표현할 수 있으므로 2^32-1의 십진수까지 표현할 수 있는 것이었다......

 

2-1. 16진수

 

16진수를 왜 쓰는가?

32비트의 컴퓨터에 데이터를 저장하려면 이진수를 32자리를 써야 하는데, 그렇게 되면 너무 길어진다. 그래서 이를 짧게 나타내고자 8진수, 16진수가 등장한 것.

 

그럼 왜 하필 16진수인가?

16은 2의 제곱수이므로, 이진수를 4자리씩 끊어서 16진수로 변환하기 용이하기 때문.

 

10진수의 0~15는 16진수의 0 1 2 3 4 5 6 7 8 9 A B C D E F로 각각 표현된다.

 

4비트의 2진수로 16진수 한 자리(십진수 0~15 중 하나)를 표현할 수 있다.
ex)1010(이진수) -> 10(십진수) -> A(16진수)

16진수 두 자릿수가 1바이트가 된다.

 

2-2. c언어 내에서의 16진수 표현

 

c언어에서 16진수로 정보를 입력할 때, 내가 입력하는 값이 16진수임을 알려주기 위해 앞에 0x를 붙여서 입력하는 것이었다.

 

%d를 사용하여 출력하면, 몇 진수로 입력을 하였든지 10진수 정수로 출력된다. 컴퓨터는 내가 몇 진수로 입력을 하였든 이를 이진수로 저장하기 때문이다.

 

따라서 어떤 수를 16진수로 출력하기 위해서는 %x를 사용해야 한다.

 

%#x를 사용하면 16진수 앞에 0x가 붙은 형태로 출력된다.

 

%#X, %X와 같이 x를 대문자로 사용하면 16진수를 표현하는 문자들이 대문자로 출력된다.