C에서는 수를 정의 하거나, 값을 저장할 수 있는 기능을 제공한다.
C에서는 수를 정의하는 것으로는 매크로라는 것으로
'#define'을 사용한다.
1
2
3
|
#define PI 3.14
#define POW(x) ((x)*(x))
|
cs |
이렇게 사용이 가능하다.
PI는 3.14라는 상수를 정의해주고, POW라는 것은 제곱을 표현하게 된다.
매크로는 특정 문자을 복사해서 덮어 씌우는 것으로 다음과 적용하는 것과 동일하게 할 수 있다.
3.14+1과 PI+1은 동일한 결과물을 가진다.
그렇다면, 매크로를 사용하는 이유가 무엇일까?
예을 들어서 (x+1)(x+2)...(x+100)이런식의 글을 작성되어 있다고 한다면,
x = 1일때, (1+1)(1+2)...(1+100)이렇게 가능하듯이.
#define X라는 것을 정의 해놓는다고 한다면,
(X+1)(X+2)...(X+100)이렇게 되었을때,
#define X 1
이렇게 하면, X=1일때 이런식으로 선언해서 사용할 수 있게 되는 것이다.
즉, 반복적으로 사용될 '상수'를 정의내려서 적용할 수 있다.
반대로 특정 연산을 정의 내려서 처리할 수 있다.
위에 작성한
#define POW(x)가 그것이다.
여기서 POW(x)는 '매크로 함수'라고 칭하며, 함수처럼 x라는 매개 변수를 받아서 '연산'을 복사한다.
단순한 연산이지만 자주 사용될 '연산'은 '매크로 함수'를 사용해서 컴파일러가 자동으로 복사 할 수 있다.
C는 계산한 결과를 저장하는 기능도 제공해준다.
이걸 '변수'라고 칭하며, 종류를 정해져있다.
C에서 기본적으로 제공해주는 '변수'의 종류는 다음과 같다.
변수 유형 | 설명 | 범위 | 예시 |
char | 단일 문자를 저장하거나, 정수형으로 데이터 최소 단위이다. | -128 ~ 127 | char ch = 'A'; char baseNum = 200; |
int | 정수를 저장하는 기본 데이터 유형 | Bit에 따라서 범위가 달라짐. 16Bit: -32768 ~ 32767 32Bit: -2147483648 ~ 2147483647 |
int num = 100; |
flaot | 실수를 저장하는데 사용되며, 단정밀도 부동 소수점 수를 나타낸다. | 1.175494351 E - 38 ~ 3.402823466 E + 38 | float realNum = 3.14f; |
double | 실수를 저장하는데 사용되며, 배정밀도 부동 소수점 수를 나타낸다. | 2.2250738585072014 E - 308 ~ 1.7976931348623158 E + 308 | double realNums = 3.14; |
short | 정수를 저장하는 데이터 유형. int보다 적은 범위를 저장한다. 16bit일때랑 똑같다. |
-32768 ~ 32767 | short num = 100; |
long | 정수를 저장하는 데이터 유형. int보다 큰 범위를 저장한다. 64bit이상일때 사용됨. |
-2,147,483,648 ~ 2,147,483,647 | long num = 100; |
여기서 접두사가 무엇이 붙냐에 따라서 변수의 상태가 달라지는 경우가 있다.
예을 들어서 unsigned가 있다.
unsigned란, 부호가 존재하지 않는 것으로 변수 유형에서 범위를 무조건 상수로 적용된 상태를 뜻한다
unsigned char라면, 0~255까지 지원하는 것 처럼 적용이 된다.
C와 C++같은 언어들은 컴파일러마다 다르지만, 실수랑 정수를 그냥 연산할 경우 정수 기준으로 계산이 되어서 결과를 저장하는 경우가 있다.
예을 들어서 int a = 1; float b = 3.14f;라는게 있다면,
a+b를 하면, 4가 결과물로 저장하게 된다.
이 경우 (a*1.0)+b을 사용해줘야한다.
예을 들어서 다음과 같이 적용했는데. 소수점이 0이 된다면, 컴파일러와 CPU가 그것을 지원해주지 않는 경우라고 이해하자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#include <stdio.h>
#define PI 3.14
int main() {
int a = 1;
float b = PI;
float c = a+b;
float d = (a*1.0)+b;
printf("%f\n", c);
printf("%f\n", d);
return 0;
}
|
cs |
'프로그래밍 > C 언어' 카테고리의 다른 글
[C] 제어(1) - 조건문 - (0) | 2024.02.17 |
---|---|
[C] 연산자 (0) | 2024.02.16 |
[C] 기본적으로 지원해주는 출력 (0) | 2024.02.14 |
[C] 기본 구조 (1) | 2024.02.13 |