본문 바로가기
프로그래밍언어/C언어

연산자 - 비트 연산자(2진수, 10진수, 16진수, 8진수)

by J코딩 2021. 9. 23.
반응형

일상에서 사용하는 수의 표현법은 10개의 숫자(0에서 9)를 이용하는 10진수 체계를 사용합니다. 그렇지만, 컴퓨팅 세계에서 사용하는 수의 표현법은 2개의 숫자(0과 1)을 이용하는 2진수 체계, 16개의 숫자(0~9, A,B,C,D,E,F)를 이용하는 16진수 체계, 8개의 숫자(0에서 7)를 이용하는 8진수 체계를 사용합니다.

  • 2진수 - 0~1까지의 숫자를 사용(컴퓨팅 세계 표현법)
  • 10진수 - 0~9까지의 숫자를 사용(일상적인 표현법)
  • 16진수 - 0~9까지의 숫자와 A,B,C,D,E,F 문자를 사용(컴퓨터 세계 표현법)
  • 8진수 0~7까지의 숫자를 사용(컴퓨팅 세계 표현법)

 

다음 표는 0부터 17까지의 수를 2진수, 10진수, 16진수, 8진수의 데이터 표현 방법으로 나타내고 있습니다.

2진수 10진수 16진수 8진수
0000 0000 0 0 0
0000 0001 1 1 1
0000 0010 2 2 2
0000 0011 3 3 3
0000 0100 4 4 4
0000 0101 5 5 5
0000 0110 6 6 6
0000 0111 7 7 7
0000 1000 8 8 10
0000 1001 9 9 11
0000 1010 10 A 12
0000 1011 11 B 13
0000 1100 12 C 14
0000 1101 13 D 15
0000 1110 14 E 16
0000 1111 15 F 17
0001 0000 16 10 20
0001 0001 17 11 21

표에서 보여주듯이 2진수의 경우에 모든 숫자를 0과 1로 표현합니다. 최대값이 1이므로 자릿수가 증가하는 시점이 1 다음에 증가합니다. 다음 그림은 2진수를 10진수로 변환하는 방법입니다. 각 비트 공간의 1(참)에 해당하는 것을 계산하면 2진수 0000 1011은 10진수로 11(23+21+20) 입니다. 

10진수의 경우에 모든 숫자를 0에서 9를 이용하여 표현합니다. 최대값이 9이므로 자릿수가 증가하는 시점이 9다음에 증가합니다. 16진수의 경우에 모든 숫자를 0에서 f를 이용하여 표현합니다. 16진수에서 a는 정수 10. b는 정수 11, c는 정수 12, d는 정수 13, e는 정수 14, f는 정수 15를 의미하고 있습니다. 16진수는 0~9까지의 기본 단위 숫자를 이용하고, 그 이후부터는 알파벳 a(10진수 10)부터 f(10진수 15)를 이용합니다. 최대값이 f(10진수 15)이므로 자릿수가 증가하는 시점이 f 다음에 증가합니다.

 

8진수의 경우에 모든 숫자를 0에서 7을 이용하여 펴현합니다. 최대값이 7이므로 자릿수가 증가하는 시점이 7 다음에 증가합니다. 컴퓨터 세계에서는 16진수와 8진수도 많이 사용합니다. 2진수로 데이터를 표현하게 되면 길이가 매우 길어져 가독성이 매우 떨어지는 단점이 있습니다. 따라서 이런 문제를 해결하기 위해서 16진수는 2진수 네 자리, 8진수는 2진수 세 자리를 각각 한 자리 숫자로 표현할 수 있습니다. 다음 그림은 4바이트 공간을 표현한 2진수를 16진수와 8진수로 표현하는 방법을 나타내고 있습니다.

2진수로 표현된 데이터를 16진수로 표현하는 방법은 4비트 단위로 묶어서 비트 공간의 1에 해당하는 것을 계산하고, 8진수로 표현하는 방법은 3비트 단위로 묶어서 비트 공간의 1에 해당하는 것을 계산하면 됩니다. 앞의 그림의 결과대로 16진수 12ff7c가 8진수로 4577574인지 확인하기 위해서 다음 예제를 통해 알아보겠습니다.

이처럼 2진수로 데이터를 표현하게 되면 길이가 매우 길어져 가독성이 매우 떨어지는 단점을 16진수와 8진수로 보완할 수 있다는 것을 배웠으니 0xa와 0x10은 2진수로 표현하면 서로 다은 데이터라는 것은 당연합니다. 0xa는 2진수로 1010이고 0x10은 0001 0000 입니다.

반응형

댓글