본문 바로가기

IT/C언어 강의 (중단)

C언어 강의 12강 - 8진수와 16진수의 서식문자와 변수

C언어 강의 12강 - 8진수와 16진수의 서식문자와 변수



안녕하세요.


이번 강의에서는 8진수와 16진수의 서식문자와 변수에 대해서 배울껀데요.


혹시 서식문자와 변수가 무엇인지 기억하시나요?


서식문자는 저희가 %d를 배웠었고


변수는 int를 배웠습니다.


기억이 나실꺼에요 안나시는 분들은 


아래 


5강-http://mapofbrain.tistory.com/22

6강-http://mapofbrain.tistory.com/23


을 보고 다시한번 복습해주세요


기본적으로 서식문자가 무엇인지 변수가 무엇인지는 아실꺼라고 생각해요.


하지만 저희가 배웠던


%d는 10진수의 정수형으로 출력할때 의 서식문자였습니다. 기억하시나요?


int는 10진수의 정수형을 저장할때 사용했던 변수였고요. (6강내용보시면 아시겠지만 int에 정수인 숫자를 저장하였습니다.)


하지만 여러분들은 의문을 품으셨을수도 있어요


세상에는 10진수의 정수말고도 소숫점이 있는 실수도 있을것이고 말했던 8진수,16진수의 숫자도 있을것인데


그럼 그런 숫자들은 어떤 서식문자와 변수를 통해서 사용해야 하는지 궁금하실껍니다.


그래서 이번강의에서는 그것에 대해서 다뤄보도록 할꺼에요.


#include <stdio.h>


int main(void)

{

int num = 2000;

printf("%d  \n",num);

return 0;

}


위의 소스코드를 보시면


메인함수 안에 int num = 2000; 이라는 문장을 통하여


num이라는 이름을 가진 변수를 사용하겠고 그 안에 2000이라는 숫자를 저장하곘다는 문장인 것을 알수 있습니다.


그리고 또 보시면


그 아래

printf("%d  \n",num);


의 문장을 통하여 


저장한 num의 변수를 printf 문을 사용하여 출력하는 것을 볼수가 있습니다.


결과 값으로는 2000이 출력이 될겁니다.


여기까지는 전에 배운 내용들을 복습한거고요.


아래의 예제를 한번 봐주세요~


#include <stdio.h>


int main(void)

{

int num1 = 01000;

int num2 = 1000;

int num3 = 0x1000;

printf("%d  \n", num1);

printf("%d  \n", num2);

printf("%d  \n", num3);

return 0;

}


위의 예제를 보시면


각각 num1,num2,num3 의 변수에


1000을 저장하고 있구나


그리고 그 1000을 각각 printf문을 통하여 출력해주고 있구나


하는 부분까지는 이해가 되실꺼에요


하지만 의아하신 부분은


int num1 = 01000; 이라는 문장에서 왜 1000앞에 0을 붙이는거지?

int num3= 0x1000; 이라는 문장에서 왜 1000앞에 0x을 붙이는거지?


하고 의아해 하실수가 있어요.


설명부터 드리자면


숫자앞에 0을 붙이게 되면 그건 8진수라는 뜻

0x를 붙이게 되면 그건 16진수라는 뜻이 됩니다.


무슨말이냐하면


우리가 2진수 10진수 8진수 16진수를 구별할때


1011(2) 154(8) 144A(16)


이런 식으로 숫자 뒤에 2,8,16을 써서 숫자를 나타내주고 있습니다.


이와 같이 C언어에서 8진수 16진수를 나타낼때에는


8진수 같은 경우는 숫자 앞에 0 16진수 같은 경우는 0x 를 붙여서 구분해주는거죠


이해가 되시나요?


하지만 서식문자를 통해서 출력을 할때는 %d를 사용하고 있습니다.


앞서 말씀드렸지만


%d 라는 서식문자는


10진수의 정수형으로 출력할때 쓰이는 서식문자입니다.


따라서 위와 같은 소스 코드의 결과값은



위와 같은 결과값이 나올겁니다.


왜냐면 8진수 1000은 10진수로 표현하면 512이고

16진수 1000은 10진수로 표현하면 4096이기 때문이죠.


그렇다면 이와 같은 숫자들을 10진수 정수형으로 출력할때는 %d 를 사용하지만

8진수, 16진수로 출력할때는 무엇을 쓸까요?


8진수는 %o

16진수는 %x

를 사용하면 됩니다.



#include <stdio.h>


int main(void)

{

int num1 = 01000;

int num2 = 1000;

int num3 = 0x1000;

printf("8진수 : %o 10진수 : %d 16진수 : %x  \n", num1, num1, num1);

printf("8진수 : %o 10진수 : %d 16진수 : %x  \n", num2, num2, num2);

printf("8진수 : %o 10진수 : %d 16진수 : %x  \n", num3, num3, num3);

return 0;

}


위의 예제를 보시면


이해가 쉬울껍니다.


printf("8진수 : %o 10진수 : %d 16진수 : %x  \n", num1, num1, num1);


의 문장을 보시면


8진수 1000을 각각 8진수, 10진수 ,16진수로 출력하는 것을 볼수가 있구요.



printf("8진수 : %o 10진수 : %d 16진수 : %x  \n", num2, num2, num2);

10진수 1000을 각각 8진수, 10진수 ,16진수로 출력하는 것을 볼수가 있구요.


printf("8진수 : %o 10진수 : %d 16진수 : %x  \n", num3, num3, num3);


16진수 1000을 각각 8진수, 10진수 ,16진수로 출력하는 것을 볼수가 있습니다.



이해가 되시나요?


그럼 결과값을 보여드리도록 할꺼에요.



말한대로 각각 8진수 10진수 16진수로 출력하는 것을 볼수가 있어요~!!


이해가 되실꺼라고 믿어요ㅕ


그럼 정리해드릴께요


변수에 저장할 숫자를 표현할때


8진수 - 앞에 0을 붙임

10진수 - 그냥 숫자만 씀

16진수 - 앞에 0x를 붙임


서식문자를 통해서 출력할때

8진수 - %o

10진수 - %d

16진수 - %x


아 그리고 2진수는 어떻게 표현하냐고 물으시는 분이 계실꺼 같아서 말씀드리자면


2진수는 딱히 표현할 수 있는 방법이 없습니다.


그래서 8진수라던지 16진수를 통해서 표현 하시면 쉬울꺼라고 생각해요~



감사합니다. 


궁금하신 사항은 댓글 통해서 남겨주세요