본문 바로가기

Programming/Linux

[리눅스][C언어] 변수 출력하기

반응형

변수 출력하기

 

vi var.c 를 통해서 새롭게 c파일을 만들었다.

gcc를 통해 파일을 컴파일해주고, 

 

변수를 출력해준다.

 

 

printf 포맷형식

출력 형식 설명 출력 예
%d 우리가 흔히 알고 있는 부호 있는 정수형을 출력해줍니다. printf("%d",-150); -150
%c 문자열 하나를 출력해줍니다. printf("%c",'A');  A
%p 주로 주소를 출력합니다. 메모리 크기만큼 자릿수가 채워집니다. 출력될때는 16진수로 표시됩니다. int a;
printf("%p",&a);
0177F95C
%x 정수를 16진수로 출력합니다. %x를 보시면 소문자인데, 16진수로 표시될때 알파벳은 소문자로 표시됩니다. printf("%x",10); a
%X 위의 %x와 동일하나 알파벳이 대문자로 표시됩니다. printf("%X",10); A
%o 8진수로 출력합니다. printf("%o", 8888); 21270
%s 문자열을 출력합니다. '\0'인 NULL문자를 만날때까지 출력이 됩니다. printf("%s","hello, world"); hello, world
%u 부호없는 정수 출력입니다. 즉, 양수를 출력하는 포맷입니다. signed bit을 정수 데이터로 취급한다는 것이죠. 만약 -1이라는 정수가 2의 보수를 거치는 과정은 이렇습니다.  0000 0000 0000 0000 0000 0000 0000 0001 -> 1111 1111 1111 1111 1111 1111 1111 1110 + 1-> 1111 1111 1111 1111 1111 1111 1111 1111 = 4294967295 이 되죠. 부호가 있다면 -1이지만 부호없으면 4294967295라고 이렇게 표시가 된다는 뜻이에요. printf("%u",1);
printf("%u",-1);
1
4294967295
%ld 부호있는 long 형 정수 출력입니다. printf("%ld", 1L); 1
%lld 부호있는 long long 형 정수 출력입니다. printf("%lld", 5294967295); 5294967295
%lu 부호없는 long 형 정수 출력입니다. printf("%lu", -12345); 4294954951
%llu 부호없는 long long 형 정수 출력입니다. printf("%llu",-12345); 18876570244468679
%f, %lf 두 개 모두 실수형을 출력합니다. 6자리까지 출력이 되면 그 이하는 반올림처리됩니다. 모자라면 0으로 채웁니다.
출력할때는 상관없지만 입력 받을때는 float 자료형에 넣을시 %f, double에 입력받을때는 %lf를 사용합니다.

float f;
double d;
scanf("%f",&f);
scanf("%lf",&d);
--------------------------
printf("%f",0.1234f);
printf("%f",0.1234567f);
0.123400
0.1234567
%e 실수를 지수 표기법으로 소문자로 표시합니다.  printf("%e", 0.11223344f); 1.122334e-01
%E 실수를 지수 표기법으로 표시할때 대문자를 사용합니다. printf("%E", 0.11223344f); 1.122334E-01

 

#include <stdio.h>

void main(){

        int a;
        a = 3;

        printf("%d\n",a);
        printf("%c\n",'b');
        printf("%u\n",123);
        printf("%f\n",12.3);
        printf("%x\n",15);

}

내용을 이렇게 변경해줬다.

 

root@DESKTOP-O5CM2RJ:/project/22-c_study# gcc var.c
root@DESKTOP-O5CM2RJ:/project/22-c_study# ./a.out
3
b
123
12.300000
f

이렇게 출력되는 것을 확인할 수 있다.

 

 

사실 여기 쓰인 포맷 형식은 c언어 문법이 아니고, printf 형식을 만든 사람이 만든 규칙일 뿐이다.

 

 

 

데이터타입이 이렇게 생긴 이유

시리얼통신을 통해 메모리에서 CPU로 하나씩 불러오는 것은 복잡하고 비효율적이었다. 그래서 병렬처리를 하게 되었다. 그렇게 처음에는 4비트 컴퓨터를 만들게 되었고, 지금은 64비트까지 올라온 것이다.

 

그래서 메모리 한 공간마다 4비트씩 저장되는 시절이 있었던 것이다.

 

한 번에 많이 불러오면 더 빠르다.

 

3비트를 만들지 않은 이유는 1비트 컴퓨터와 2비트 컴퓨터를 따로 만드러야 하기 때문에 복잡해지고 호환성 문제가 생긴다.

 

복제하면 되기 때문.

 

컴퓨터의 발전 과정 중에 한 번에 불러오는 데이터량에 따라서 데이터타입이 다양하게 생기게 되었다.

 

다양한 데이터타입을 C언어에서 지원하는 이유는 다양한 컴퓨터를 지원해야 했기 때문이다.

 

 

char가 1바이트인 이유

문자가 char 1바이트로 표현되는 이유도 8비트로 표현할 수 있는  256개의 경우의 수 안에 알파벳이 아스키코드라는 형식으로 다 표현될 수 있기 때문이다.

 

 

출력해보기

#include <stdio.h>

void main(){

        int i=1;
        unsigned int ui=2;

        char c=3;
        unsigned char uc=4;

        short s=5;
        unsigned us=6;

        long l=7;
        unsigned long ul=8;

        float f=9.0;
        double d=11.0;

        long long ll=13;
        unsigned long long ull=14;


        printf("%d\n",i);
        printf("%u\n",ui);
        printf("%d\n",c);
        printf("%hd\n",uc);
        printf("%d\n",s);
        printf("%hd\n",us);
        printf("%ld\n",l);
        printf("%lu\n",ul);
        printf("%f\n",f);
        printf("%lf\n",d);
        printf("%lld\n",ll);
        printf("%llu\n",ull);
}
root@DESKTOP-O5CM2RJ:/project/22-c_study# ./a.out
1
2
3
4
5
6
7
8
9.000000
11.000000
13
14

 

반응형