05_연산자(Operator)
Operator는 연산자는 뜻이다.
수학과 관련된 기능을 담당하고 있다.
Operator 중에 산술 연산자, 논리 연산자, 관계 연산자, 증감 연산자, 대입 연산자, 조건 연산자 등 여러 가지이다.
산술 연산자
구분 | 연산자 | 표현방법 |
더하기 | + (Addition) | A + B |
빼기 | - (Subtraction) | A - B |
곱하기 | * (Multiplication) | A * B |
나누기 | / (Division) | A / B |
나머지 | %(Remainder) | A % B |
int main()
{
int A = 1 + 3;
printf("A : %d\n", A);
char B = A;
printf("B : %d\n", B);
short C = A * B;
printf("C : %d\n", C);
int D = C / (A + B) * 2;
printf("D : %d\n", D);
float FA = 1.5 + 1.7;
printf("FA : %f\n", FA);
float FB = FA * 2.0;
printf("FB : %f\n", FB);
}
정수 자료형으로 만든 변수끼리는 산술 연산에 대해서 문제가 발생하지 않는다.
단 자료형의 범위 값을 넘어가게 된다면 문제가 발생한다. 정수형끼리의 연산과 실수형끼리의 연산은 문제가 발생할 일이
적지만 정수형과 실수형끼리의 연산은 문제가 발생한다.
복합 대입 연산자
대입 연산자가 발동되기 전에 특정 연산을 하고 난 뒤 대입하는 연산자이다.
= 은 대입 C언어에서 대입 연산자이다. =에 +, -, *, /, % .. 붙은 것이 바로 복합 대입 연산자이다.
구분 | 연산자 | 표현 방법 | 같은 식 |
더하기 | += | A += B | A = A + B |
빼기 | -= | A -= B | A = A - B |
곱하기 | *= | A *= B | A = A * B |
나누기 | /= | A /= B | A = A / B |
나머지 | %= | A %= B | A = A % B |
int A = 10; // int형 메모리 공간의 이름은 A이고 A의 값은 10
A = A + 10; // A에 A + 10을 대입
printf("A + 10 : %d\n", A); // A + 10 : 20의 값을 출력
A += 10; // A에 A + 10을 대입과 같은 의미(복합 대입 연산자)
printf("A += 10 : %d\n", A); // A += 10 : 30의 값을 출력
이와 같이 처음 변수 A에 10을 대입하는 A + 10을 출력하면 20의 값이 나오게 된다. 그 후에
A += 10을 하게 된다면 이 또한 A + 10을 대입한다는 의미이기 때문에 20에 10을 더해 30이라는 수가 나온다.
비교 연산자
비교 연산자는 특정한 값을 비교하는 연산자를 의미합니다.
<, >, <=, >=, ==, != 과 같이 쓰며 연산의 결과는 0(False), 1(True)를 반환합니다.
C Programming에서 반환이라는 의미는 특정한 값을 보내준다 입니다.
구분 | 연산자 | 표현 방법 |
크기 작거나 크거나 | < , > | A > B, A < B |
크기가 같거나 작거나 크거나 | <= , >= | A <= B, A >= B |
관계가 같다 | == | A == B |
관계가 같지 않다 | != | A != B |
int A = 10, B = 10, C = 20;
char Result;
Result = A > C; // A가 C보다 크다면 10 > 20 (False)
printf("A > C : %d\n",Result); // False이므로 0
Result = B < C; // B가 C보다 작다면 10 < 20 (True)
printf("B < C : %d\n",Result); // True이므로 1
Result = A >= B; // A가 B보다 작거나 같다면 10 >= 10 (True)
printf("A >= B : %d\n,Result); // True이므로 1
Result = B <= C; // B가 C보다 작거나 같다면 10 <= 20 (True)
printf("B <= C : %d\n",Result); // True이므로 1
Result = A == B; // A가 B와 같다면 10 == 10 (True)
printf("A == B : %d\n",Result); // True이므로 1
Result = B != C; // B와 C가 같지 않다면 10 != 20 (True)
printf("B != C : %d",Result); // True이므로 1
증감 연산자
특정한 값을 1 증가 시키거나 감소시키는 연산자이다.
사용 위치에 따라 변환하는 타이밍이 다른 특징이 있다.
증감 연산자에는 값 전에 연산자를 사용하는 전위 증감 연산자와 값 후에 연산자를 사용하는 후위 증감 연산자가 있다.
구분 | 연산자 | A를 1이라고 가정했을 때 결과 |
전위 증가 연산자 | ++A | 2 |
후위 증가 연산자 | A++ | 2 |
전위 감소 연산자 | --A | 0 |
후위 감소 연산자 | A-- | 0 |
하지만 밑의 예제처럼 상황에 따라 증가되는 순서가 다르다.
int A = 0;
// 전위 증감 연산자
++A; // A를 1증가
printf("A : %d\n", A); // A를 1증가 하므로 A의 값은 1
--A; // A를 1감소
printf("A : %d\n", A); // A를 1감소 시킨 값의 A는 0
++A;
// 후위 증감 연산자
printf("A : %d\n", A++); // ++A된 A의 값을 1증가시키지만, ++A된 A값을 출력하여 1
printf("A : %d\n", A); // A값 1을 A++시킨 A의 값은 2
삼항 연산자
삼항 연산자는 진리값에 의해 True일 때의 값과 False일 때의 값을 다르게 반환해주는 연산자이다.
사용방법은 (진리값) ? 참일 때 반환할 값 : 거짓일 때 반환할 값이다.
int A = 10, B = 20;
char Result = A > B ? 'A' : 'B';
printf("A와 B중 더 큰 변수는 %c입니다.\n",Result); // B 출력
int C = 30;
Result = (B > C) ? 'C' : 'B';
printf("B와 C중 더 작은 변수는 %c입니다.\n",Result); // B 출력
int number = 1 ? 100 : 1000;
printf("number의 값은? %d입니다.",number); // 1은 True이므로 100 출력
sizeof() 연산자
sizeof()연산자는 Datatype의 크기를 반환해주는 연산자이다.
char IntSize = sizeof(int);
printf("IntSize = %d\n",IntSize); // int는 4byte이므로 4출력
char DoubleSize = sizeof(double)
printf("DoubleSize = %d\n",DoubleSize); // double은 8byte이므로 8출력
short MyShort = 10;
char MyShortSize = sizeof(MyShort);
printf("MyShortSize = %d\n",MyShortSize); // MyShort에 10이 들어가있지만 short 자료형이기 때문에 2출력
char TenSize = sizeof(10);
printf("TenSize = %d\n",TenSize); // sizeof(10)의 정수 10은 int로 반환되어 4출력
charPiSize = sizeof(3.14f);
printf("PiSize = %d\n",PiSize); // sizeof(3.14f)의 3.14는 float으로 반환되어 4출력