우리는 컴퓨터에게 "Hello World", "10" 등의 형태로 데이터를 입력하지만, 사실은 컴퓨터는 모든 데이터의 표현 및 연산을 2진수로 처리합니다. 때문에 외국인과 대화를 할려고 할 때 어느정도 영어가 가능해야하는것 처럼 c언어를 정확하게 이해하려면 2진수를 정확하게 이해해야 합니다.
1. 2진수, 10진수, 16진수는 무엇인가?
2진수란 데이터를 표현할 때 0과 1 두 개의 숫자만을 쓰겠다는 뜻이고, 10진수는 데이터를 표현할 때 0~9까지 10개의 숫자를 쓰겠다는 뜻입니다. 마찬가지로 16진수는 16개의 숫자를 쓰는것인데, 여기서 문제가 있습니다. 0~9까지는 문제가 없지만 10이 넘어가면 이 때의 표현이 애매 해지는 것입니다. 10이라는 하나의 숫자로 생각할 수 있겠지만, c언어에서 그리고 지금 배우는 내용에서는 10이 아니라 1과 0으로 인식 해야 합니다. 그리고 9이상의 숫자를 표현할 때는 10, 11 ~ 이 아닌 a, b, c, d, e, f로 표현을 해야합니다. 그러므로 16진수의 숫자 16자리는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a(10), b(11), c(12), d(13), e(14), f(15) 라고 표현 할 수 있습니다.
2진수 |
10진수 |
0 |
0 |
1 |
1 |
10 |
2 |
1 |
3 |
100 |
4 |
101 |
5 |
위의 표는 10진수와 2진수를 비교한 표 입니다. 10진수는 우리에게 친숙하다면 2진수는 다소 어색하실 수 있습니다. 2진수는 0과 1만을 사용해서 수를 표현하기 때문에 2이상을 표현하지 못해 자리수를 증가하였을 뿐 10진수와 크게 다른것이 없습니다. 10진수는 0~9까지 카운팅한 후에 10으로 자릿수를 올리게 됩니다. 마찬가지로 2진수는 0~1까지 카운팅하고 자릿수를 올려 다음 숫자가 10이 되는것입니다.
마찬가지로 16진수 역시 16번째 숫자다음에 자릿수가 증가하게 됩니다. 위에서 말씀드렸듯이 16진수는 0~f 까지 카운팅을 합니다. 때문에 f다음에 자릿수를 증가하는 것 입니다.
2. 데이터의 단위 비트와 바이트
비트는 컴퓨터가 나타내는 데이터의 최소 단위로서 2진수 값 하나 0또는 1을 저장할 수 있는 메모리 공간의 크기를 의미합니다. 그리고 앞에 말한 비트가 8개 모여서 하나의 단위로 구성된 것을 바이트라고 합니다.
3. 8진수와 16진수의 데이터 표현
앞에서 2진수, 10진수, 16진수에 대한 언급을 했는데 그 외에 8진수로도 데이터의 표현이 가능합니다. 다음은 c언어에서의 각 진수의 표현법 입니다.
int a=10; // 10진수 int b = 0xa; //16진수 int c = 012; //8진수 위 코드에서 a, b, c의 값은 모두 10입니다. 하지만 다 같은 값을 표현하고 있지만, 코드의 형태는 같지 않음을 알 수 있을 것 입니다. 그렇습니다. a는 10진수로 10을 표현한 것이며, b는 16진수로써의 10을 표현한것, 마찬가지로 c는 8진수의 10의 표현법 인 것 입니다. 이렇게 10진수 외에 다른 진수법으로 숫자를 표현 하고자 할 때 위와 같이 16진수는 0x, 8진수는 0으로 시작해서 수를 표현해야 하는 것 입니다. 물론 표현법은 다르지만 컴퓨터에서는 위의 모든 표현을 2진수로 받아들여 저장했을 것입니다.
8진수, 16진수, 10진수를 사용하기 위해서는 진법 변환을 알아야 하고 이는 모든 컴퓨터 전공분야의 기본이 됩니다. 만약 프로그래밍을 계속 공부하겠다고 한다면 진법변환에 대한 이해는 꼭 하고 공부를 해야할 것 입니다. 완벽한 이해 뒤에 c언어를 배워나간다면 굳이 계산하지 않아도 자연스럽게 사용할 수 있게 될 것 입니다.
'mandle.Making > C언어' 카테고리의 다른 글
Arduino 16x2 character LCD I2C 제어하기 (0) | 2017.12.19 |
---|---|
c언어 기초 scanf 함수의 이해 (0) | 2017.02.21 |
c언어기초 변수와 연산자 (0) | 2017.02.21 |
자료구조란 (0) | 2017.02.19 |