[열혈C프로그래밍] chapter 5. 상수와 기본 자료형

chapter 5

상수와 기본 자료형

5-1 C언어의 기본 자료형

  1. 자료형 : 데이터를 표현하는 기준 정수를 표현하더라도 자료형의 종류에 따라 데이터의 표현 범위가 달라진다.

자료형이 많은 이유:
=> 컴퓨터에서 정수와 실수를 표현하는 방식이 다르기 때문에 정수형과 실수형이 각각 반드시 하나씩은 있어야 한다.
: 정수 : 2의 보수로 표현
실수 : +-(1.m)*2^(e-127)로 표현
=> 메모리의 공간의 적절히 사용하기 위해서 다영한 크기의 자료형이 필요하다.

수 표현 type 크기 값의 표현범위
정수 char 1byte -128 ~ 127
정수 short 2byte -2^7 ~ 2^7 -1
정수 int 4byte -2^15 ~ 2^15 -1
정수 long 4byte -2^15 ~ 2^15 -1
정수 long 8byte -2^63 ~ 2^63 -1
실수 float 4byte -
실수 double 8byte -
실수 long double 8byte 이상 -
  1. sizeof 연산자: 자료형의 크기를 바이트를 기준으로 보여주는 연산자

  2. unsigned를 붙여 0과 양의 정수만을 표현할수 있다. unsigned형 자료형을 만든 이유: 0과 양의 정수만 표현할때, 또 표현할 수 있는 값의 범위를 더 넓게 쓰기 위해(양의 방향)

정수 자료형 크기 값의 표현범위
unsigned char 1byte 0 ~255
unsigned short 2byte 0 ~ 2^16-1
unsigned int 4byte 0 ~ 2^32-1
unsigned long 4byte 0 ~ 2^32-1
unsigned long long 8byte 0 ~ 2^64-1

5-2 문자의 표현방식 & 문자를 위한 자료형

컴퓨터는 숫자를 통해 문자를 표현한다
=> 아스키(ASCII)코드라는 테이블로 특정 숫자가 특정 문자를 표현하도록 약속하였다.
아스키 코드 아스키코드 값
A 65
a 97

# include <stdio.h>

int main(void){

  char ch1 = 'A', ch2 =65; // ch1과 ch2에 저장되는 값은 동일하다.
  char ch3 = 'a', ch4 =66; // ch3와 ch4에 저장되는 값은 동일하다.
  
  printf(" %c %d \n",ch1,ch1);
  printf(" %c %d \n",ch2,ch2);
  printf(" %c %d \n",ch3,ch3);
  printf(" %c %d \n",ch4,ch4);

  return 0;
}

5-3 상수에 대한 이해

상수는 크게 이름이 없는 상수(Literal)와 이름이 있는 상수로 나뉘며,
상수는 int 나 double과 같은 자료형으로 표현된다. 4 => int 4.0 => double

  1. 리터럴(Literal) 상수 (1) 이름이 따로 없다.
    int num = 30 + 40; // 30과 40이 리터럴 상수이다.
    

    (2) 리터럴 상수의 자료형 ```c int inum =5; // 정수형 상수(int) double dnum= 7.2 // 실수형 상수(double) double dnum2 = 4.0 // 실수형 상수(double)

char ch = ‘A’; /* 리터럴 상수’A’가 자료형이 char일 것같지만 아스키코드로 65이므로 int로 표현되어야한다. 애초에 컴퓨터는 숫자를 통해 문자를 표현하므로 리터럴 상수의 자료형엔 char가 존재하지않는다. 따라서 size of(‘A’) = 4 */

 2. 접미사를 이용한 상수 표현
   본래 정수형 상수는 기본적으로 자료형이 int이고 , 실수형 상수는 자료형이 double이다. <br>
   따라서 double 형 상수인데 float 변수에 저장하여 사용한다면 데이터가 잘려 나갈 수 있다 <br> 
   (double이 더 표현하는 범위가 넓은데 float 변수에 저장하므로) <br>
   이는 리터럴 상수 끝에 접미사를 붙여 상수의 자료형을 지정하여 문제를 해결할 수 있다. 
```c
float num1 = 3.15f //상수의 자료형은 float
float num2 = 3.15F //상수의 자료형은 float 
long double num3 = 3.15l //상수의 자료형은 long double 
long double num4 = 3.15L //상수의 자료형은 long double

//double은 default한 자료형이기 때문에 따로 접미사가 없다.
  1. 이름을 지니는 심볼릭(Symbolic) 상수: const 상수
    이름이 있는 상수로 초기화한 이후에 값을 절대 변경할 수 없다는 특징이 있다.
    const 가 붙으면 변수가 아니라 상수이다. 따라서 변경 불가이다. 그리고 변경하려고 한다면 컴파일 에러가 발생한다.
    ```c int main(void){ const int MAX =1000; //MAX는 상수이고(변수가 아니다!) 따라서 값을 변경할 수 없다. const double PI =3.14; //PI는 상수이고(변수가 아니다!) 따라서 값을 변경할 수 없다.

return 0; }

```c
int main(void){
	const int num=1; //상수 num을 1로 초기화. 이후 num의 값을 변경할 수 없음.
  num = 2 ; // 상수의 값을 바꾸려 했으므로 에러! 따라서 컴파일 에러가 발생한다. 
  
  return 0;
}