▩ 자료형의 종류
 

- 하드웨어의 제한된 CPU Resource와 Memory 때문에 데이터 타입을 정확하게 지정을 해야 메모

  리와 프로세서의 낭비를 줄일 수 있습니다.


1. 자료형의 종류

   - 기본형-문자형     크기      기억되는 값의 범위
     . char                1 Byte    -128 ~ 127

     ※ 바이트 분리의 원리

        0000 0000 ---> 0
        0000 0001 ---> 1
        ~
        ~
        0111 1111 --->  127 

                               OS는 지정된 데이터크기의 첫비트가 0이면 양수, 1이면 음수로 처리합니다.
        1000 0000 ---> -128  첫비트가 1임으로 음수로 처리됩니다.
        1000 0001 ---> -127
        1000 0010 ---> -126
        1000 0011 ---> -125
        ~
        ~
        1111 1111 ---> -1
        0000 0000 ---> 0



     . unsigned char   1 Byte    0 ~ 255

   - 기본형-정수형     크기      기억되는 값의 범위
     . short           2 Byte    -32768 ~ 32767
     . unsigned short  2 Byte    0 ~ 65535
     . int             2,4 Byte  -32768 ~ +32767, -2147483648 ~ 2147483647
     . unsigned int    2,4 Byte  0 ~ 65535, 0 ~ 4294967295
     . long            4 Byte    -2147483648 ~ 2147483647
     . unsigned long   4 Byte    0 ~ 4294967295
 
   - 기본형-실수형     크기      기억되는 값의 범위
     . float           4 Byte    3.4e-38 ~ 3.4e38
     . double          8 Byte    1.7e-308 ~ 1.7e308
     . long double     10 Byte   3.4e-4932 ~ 3.4e4932
  
   - 기본형-나열형
     . enum            enum{sero, one, two, three, four} a, b

   - 기본형-무치형
     . void

   - 합성형-배열형
     . int a[5]

   - 포인터형 int *ptr
  
   - 구조체형   struct

   - 공용체형   union




2. 최대 최소값의 연산

   컴퓨터                    사람
============================
  01111111 11111111 =  32767
+                        1
-------------------
  10000000 00000000 = -32768


   컴퓨터                    사람
============================
  10000000 00000000 = -32768
-                        1
-------------------
  01111111 11111111 =  32767



>>>>> 관련 예제


#include <stdio.h>
#include <conio.h>

void main() {
    char k;  //-128 ~ +127

    k=127; printf("k=%d", k); //127
    printf("\n");

    //127+1: const int
    k=127+1; printf("k=%d", k); //-128
    printf("\n");

    //-128 + (255-128) = -1, 11111111
    k=255; printf("k=%d", k); //-1
    printf("\n");

    //11111111 + 1 = 00000000
    k=256; printf("k=%d", k); //0

}




>>>>> sizeof()함수의 사용


 #include <stdio.h>

 void main() {
   char c;
   int i;
   long l;
   unsigned int ui;
   unsigned long ul;
   float f;
   double d;

   printf("c형의 크기는 %d바이트입니다.\n", sizeof(c));
   printf("int형의 크기는 %d바이트입니다.\n", sizeof(i));
   printf("long형의 크기는 %d바이트입니다.\n", sizeof(l));
   printf("unsigned int형의 크기는 %d바이트입니다.\n", sizeof(ui));
   printf("unsigned long형의 크기는 %d바이트입니다.\n", sizeof(ul));
   printf("float형의 크기는 %d바이트입니다.\n", sizeof(f));
   printf("double형의 크기는 %d바이트입니다.\n", sizeof(d));
  
   printf("\n상수의 데이터사이즈\n");
  
   printf("a문자의 크기 %d입니다.\n", sizeof('a'));  //1
   printf("b문자의 크기 %d입니다.\n", sizeof('b'));  //1

   //'a', 'b', '\0'
   printf("ab문자의 크기 %d입니다.\n", sizeof("ab"));//3
   printf("abcd의 크기 %d입니다.\n", sizeof("abcd"));//5
   printf("10의 크기 %d입니다.\n", sizeof(10));      //4

   printf("10.5의 크기 %d입니다.\n", sizeof(10.5));  //8
   printf("10.5의 크기 %d입니다.\n", sizeof(10.5f)); //4
 }




3. %d의 출력(#은 공백을 의미)
   - 123일경우
      %d: 123
     %7d: ####123
     %7d: ###1234
     %7d: ##12345



4. %f의 출력
   - %10.3f 처럼 사용
   - 소수 자릿수 지정시 자동 반올림
   - 전체 자리수가 많으면 왼쪽 부분이 공백으로 채워짐

   - 데이터가 123.456일경우의 출력결과
     %7.3f : 123.456
     %8.3f : #123.456
     %8.4f : 123.4560
     %8.2f : ##123.46 <-- 자리올림 발생
     %2.1f : 123.5    <-- 전체자리수 보다작은 자리수는 사용하지 말것
     %.1f  : 123.5    
     %8.0f :      123 <-- 정수만 나옴




>>>>> 실수형의 출력


 #include <stdio.h>

 void main() {
   float f=256.124;
   float g=256.0;
   float h=256;

   printf("%f\n", f);
   printf("%7.3f\n", f);
   printf("%f\n", g); //소수이하 무조건 6자리가 출력됨
   printf("%f\n", h);
 }




>>>>> 소수자리가 6자리가 넘는 경우의 출력


- float형의 경우 소수이하 5자리까지만 정확도가 유지됩니다.
 
#include <stdio.h>
#include <conio.h>

 void main() {
   float k=120.12345678;
   double dk=120.12345678;

   printf("값은: %12.6f\n", k); //120.123459
   printf("값은: %12.7f\n", k); //120.1234589
   printf("값은: %12.8f\n", k); //120.12345886
   printf("\n");
   printf("값은: %12.6f\n", dk);//120.123457
   printf("값은: %12.7f\n", dk);//120.1234568
   printf("값은: %12.8f\n", dk);//120.12345678

   getch();
 }




>>>>> 데이터의 역순으로 출력


- 숫자는 정렬이 오른쪽 기준입니다.
- 문자는 왼쪽 정렬입니다.

#include <stdio.h>
#include <conio.h>

void main() {
  float f=256.124;
  float g=256.0;
  float h=256;

  printf("%-f\n", f);
  printf("%-10.3f\n", f);
  printf("%-10.3f\n", g);
  printf("%10.3f\n", h);
  getch();
}




5. %e의 출력
   - 정수 한자리만 남기고 전부 소수화 시킨다.



>>>>> 지수 형태의 출력


 #include <stdio.h>

 void main() {
   float f=256.124;
   float g=256.0;
   float h=256;

   printf("%e\n", f);
   printf("%e\n", g);
   printf("%e\n", h);
 }




6. %c: 문자의 출력



>>>>> 아스키코드의 출력


 #include <stdio.h>

 void main() {
   char c;

   printf("임의의 문자를 입력하세요 : ");
   scanf("%c", &c);
   printf("입력한 문자 : %c\n", c);
   printf("아스키 코드 : %d\n", c);
 }




>>>>> 문자형식의 연산


 #include <stdio.h>

 void main() {
   char c='c';
  
   printf("원래 문자는 %c입니다.\n", c);
   printf("%c의 다음 문자는 %c입니다.\n", c, c+1);
   printf("%c의 이전 문자는 %c입니다.\n", c, c-1);
   printf("%c의 대문자는 %c입니다.\n", c, c-32);
 }




7. %s: 문자열의 입/출력



>>>>> 문자열의 입력


 #include <stdio.h>

 void main() {
   char name[30], depart[30];

   printf("이름을 입력하세요 : ");
   scanf("%s", name);
   printf("학과를 입력하세요 : ");
   scanf("%s", depart);
   printf("당신의 이름은 %s입니다.\n", name);
   printf("당신의 학과는 %s입니다.", depart);
 }




>>>>> 문자열 입출력


 #include <stdio.h>

 void main() {
   char frt[30];
   int dan, num;

   printf("품목을 입력하세요. ");
   scanf("%s", frt);
   printf("판매단가를 입력하세요. ");
   scanf("%d", &dan);
   printf("판매수량을 입력하세요. ");
   scanf("%d", &num);
   printf("\n");
   printf("   ** 품목별 판매 현황 **\n");
   printf("=============================\n");
   printf("품목\t단가\t수량\t금액\n");
   printf("-----------------------------\n");
   printf("%s\t%d\t%d\t%d\n", frt, dan, num, dan*num);
   printf("-----------------------------\n");
 }

Posted by 나비:D
:
BLOG main image
by 나비:D

공지사항

카테고리

분류 전체보기 (278)
Programming? (0)
---------------------------.. (0)
나비의삽질 (5)
Application (177)
SQL (51)
Web (27)
etc. (14)
Omnia (0)
---------------------------.. (0)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

달력

«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Total :
Today : Yesterday :