연산자 대입 연산자 산술 연산자 관계 연산자 논리 연산자 비트 연산자 콤마 연산자 축약 연산자 sizeof 연산자 연산자 우선순위 산술 연산자 논리 연산자 콤마 연산자 sizeof 연산자
연산자 연산자 분 류 연 산 자 산술 연산자 +, -, *, /, % 관계 연산자 분 류 연 산 자 산술 연산자 +, -, *, /, % 관계 연산자 >, <, ==, !=, >=, <= 증감 연산자 ++, -- 논리 연산자 &&, ||, ! 조건 연산자 ?: 비트 논리 연산자 &, |, ^, ~ 비트 이동 연산자 <<, >> 대입 연산자 =
대입 연산자 대입 연산자 연산 진행 순서가 중요함 x = 5 + 6; 연산자 : ‘+’, '=' 피연산자 : 5, 6, x 피연산자인 5와 6을 산술 연산자 ‘+’를 이용하여 더 한 값이 대입 연산자 ‘=’를 통해 x에 저장된다. 대입 연산자가 가장 늦게 수행된다. 일반적인 수학에서와 다른 점 x = x + 2; 위의 수식은 일반적인 수학에서는 에러이다. 그러나 프로그램에서는 가능하다. 위의 수식은 x값에 2를 더한 결과를 x에 저장하라는 의미이다.
【예제 4-1】Ex1.c 02 대입 연산자 예제 01 #include <stdio.h> 02 int main(void) 03 { 04 int a, b = 0; 05 a = 4; 06 printf(" a = 4 문장을 실행 후 a의 값은 %d\n", a); 07 a = a + 3; 08 printf(" a = a + 3 문장을 실행 후 a의 값은 %d\n", a); 09 b = a + 2; 10 printf(" b = a + 2 문장을 실행 후 b의 값은 %d\n", b); 11 return 0; 12 } 표준입력 스트림
산술 연산자 – 단항 연산 02 단항 연산자 단항 산술 연산자란 피연산자를 하나만 사용하는 산술 연산자로 오른쪽에서 왼쪽으로 적용되며, ++, -- 등이 있다. ++나 --는 증감 연산자라고 불리는데, 변수의 값을 1씩 증가, 또는 감소시킨다. 연산자 연산식 의 미 ++ a ++ 변수의 값에 먼저 연산에 적용시킨 후 최종 변수의 값에 1을 증가시킨다. ++ a 변수의 값을 먼저 1 증가시킨 후 변수의 최종값을 수식에 적용시킨다. -- a -- 1을 감소시킨다. -- a 변수의 값을 먼저 1 감소시킨 후 변수의 최종값을 수식에
【예제 4-2】Ex2.c 02 산술 연산자 예제 01 #include <stdio.h> 02 int main(void) 03 { 04 int a, b, c; 05 a = 10; b = 20; c = 30; 06 a = ++b ; 07 c = b++; 08 printf(" a = %d b = %d c = %d \n", a, b, c); 09 a = ++b + ++c; 10 printf(" a = ++b + ++c 문장 실행후 \n"); 11 printf(" a = %d b = %d c = %d\n", a, b, c); 12 a = b++ + c++; 13 printf(" a = b++ + c++ 문장 실행후 \n"); 14 printf(" a = %d b = %d c = %d\n", a, b, c); 15 return 0; 16 } 표준입력 스트림
산술 연산자 – 이항 연산 03 이항 연산자 이항 산술 연산자는 두 개의 피연산자를 필요로 하는 산술 연산이다. 이항 산술 연산자는 사칙연산과 잉여 나눗셈을 포함한다. 연 산 자 의 미 기 능 + 덧 셈 a = b + c - 뺄 셈 a = b - c * 곱 셈 a = b * c / 나눗셈 a = b / c % 나머지 a = b % c
【예제 4-3】Ex3.c 02 산술 연산자 예제 01 #include <stdio.h> 02 int main(void) 03 { 04 int a = 20, b = 3, c = 7, d, e; 05 float f = 15.0, g; 06 d = a / b; 07 printf("d = a / b을 실행후 d의 값은 %d\n", d); 08 e = a % c; 09 printf("e = a %% c을 실행후 e의 값은 %d\n", e); 10 g = f / c; 11 printf("g = f / c를 실행후 g의 값은 %f\n", g); 12 return 0; 13 } 표준입력 스트림
【예제 4-4】Ex4.c 02 산술 연산자 예제 01 #include <stdio.h> 02 int main(void) 03 { 04 int length, area; 05 printf("정사각형의 한변을 입력하라 \n"); 06 scanf("%d", &length); 07 area = length * length; 08 printf("정사각형의 넓이는 %d 이다.\n", area); 09 return 0; 10 } 표준입력 스트림
관계 연산자 04 관계 연산자 두 수간에 대소 관계 및 특정 조건을 검사할 때 사용하는 연산자로 관계가 사실이면 참(true 또는 1)을, 성립되지 않으면 거짓(false 또는 0)을 표시한다. 다음은 관계 연산자의 종류를 나 타낸다. 프로그램에서는 거짓은 ‘0’으로 나타내고, ‘0’이외의 모든 값은 참으로 여긴다. 연산자 의미 사 용 법 > ~ 보다 크다 a = (b > c) b가 c보다 크면 a=1, 그렇지 않으면 a = 0이다. < ~ 보다 작다 a = (b < c) b가 c보다 작으면 a=1, 그렇지 않으면 a = 0이다. >= ~ 보다 크거나 같다 a = (b >= c) b가 c보다 크거나 같으면 a=1, 그렇지 않으면 a = 0이다. <= ~ 보다 작거나 같다 a = (b <= c) b가 c보다 작거나 같으면 a=1, 그렇지 않으면 == 같다 a = (b == c) b와 c가 같으면 a=1, 그렇지 않으면 a = 0이다. != 같지 않다 a = (b != c) b와 c가 같지 않으면 a=1, 그렇지 않으면
【예제 4-5】Ex5.c 02 관계 연산자 예제 01 #include <stdio.h> 02 int main(void) 03 { 04 int score, grade; 05 printf("점수를 입력하세요 : "); 06 scanf("%d", &score); 07 grade = score >= 90; 08 if (grade == 1) 09 printf("결과는 %d, 합격\n", grade); 10 else 11 printf("결과는 %d, 불합격\n", grade); 12 return 0; 13 } 표준입력 스트림
논리 연산자 05 논리 연산자 여러 개의 조건을 결합하여 판정하는 연산자로 AND, OR, NOT의 논리 연산을 수행한다. 관계 연산자와 마찬가지로 참(true)일 때는 1로, 거짓(false) 일 때는 0으로 표시된다. 연산자 의 미 사 용 법 논리곱(&&) AND a = b && c b와 c가 모두 참이면 a = 1, 아니면, a = 0 이다. 논리합(||) OR a = b || c b와 c가 모두 거짓면 a = 0, 아니면, a = 1 이다. 논리부정(!) NOT a = !b b가 참이면 a = 0, b가 거짓이면 a = 1이다.
【예제 4-6】Ex6.c 02 논리 연산자 예제 01 #include <stdio.h> 02 int main(void) 03 { 04 int a = 0, b = 1; 05 printf("논리 연산 1 && 2 의 결과 : %d\n", 1 && 2); 06 printf("논리 연산 0 && 2 의 결과 : %d\n", 0 && 2); 07 printf("논리 연산 0 || 2 의 결과 : %d\n", 0 || 2); 08 printf("논리 연산 0 || 0 의 결과 : %d\n", 0 || 0); 09 printf("논리 연산 !a 의 결과 : %d\n", !a); 10 printf("논리 연산 !b 의 결과 : %d\n", !b); 11 return 0; 12 } 표준입력 스트림
【예제 4-7】Ex7.c 02 논리 연산자 예제 01 #include <stdio.h> 02 int main(void) 03 { 04 int a = 0, b = 1, c = 1; 05 printf("논리 연산 1 && 1 || 0 의 결과 : %d\n", 1 && 1 || 0); 06 printf("논리 연산 1 && 0 || 1 의 결과 : %d\n", 1 && 0 || 1); 07 printf("논리 연산 1 && 0 || 1 의 결과 : %d\n", 1 && 0 || 0); 08 printf("논리 연산 1 && 0 || 0 && 1 의 결과 : %d\n", b && a || a && c); 09 printf("논리 연산 <1 && 0> || <0 && 1>의 결과 : %d\n", (b && a) || (a && c)); 10 return 0; 11 }
【예제 4-8】Ex8.c 02 논리 연산자 예제 01 #include <stdio.h> 02 int main(void) 03 { 04 int a = 0, b = 1, c = 1; 05 printf("a < b && c > a 결과 : %d\n", a < b && c > a); 06 printf("a > b && c > a 결과 : %d\n", a > b && c > a); 07 printf("a > b || c > a 결과 : %d\n", a > b || c > a); 08 printf("괄호를 사용하는 것이 더 좋음\n"); 09 printf("(a > b) || (c > a) 결과 : %d\n", (a > b) || (c > a)); 10 return 0; 11 }
비트 연산자 06 비트 연산자 비트 연산자는 피연산자 정수값을 비트 단위로 논리 연산을 수행하는 연산자이다. AND, OR, NOT의 기본 논리식에 의해 이루어진다. 연산자 의 미 사 용 법 & 비트 곱 (AND) a = b & c b와 c를 AND 연산하여 a에 대입 | 비트 합 (OR) a = b | c b와 c를 OR 연산하여 a에 대입 ^ 배타적 논리합(XOR) a = b ^ c b와 c를 XOR 연산하여 a에 대입 ~ 비트 반전 (1의 보수) a = ~c b의 각 비트를 반전하여 a에 대입 << 왼쪽으로 이동 (shift) a << b a를 b만큼 왼쪽으로 비트 이동 >> 오른쪽으로 이동 (shift) a >> b a를 b만큼 오른쪽으로 비트 이동
【예제 4-9】Ex9.c 02 비트 연산자 예제 01 #include <stdio.h> 02 int main(void) 03 { 04 unsigned char lastmask = 1; 05 unsigned char firstmask = 128; 06 unsigned char input; 07 printf("값을 입력하시오.\n"); 08 scanf("%d", &input); 09 printf("입력한 값 %d의 첫번째 비트는 %d 이다.\n", 10 input, input & firstmask); 11 printf("입력한 값 %d의 마지막 비트는 %d 이다.\n", 12 input, input & lastmask); 13 return 0; 14 } 표준입력 스트림
【예제 4-10】Ex10.c 02 비트 연산자 예제 01 #include <stdio.h> 02 int main(void) 03 { 04 unsigned char lastmask = 1; 05 unsigned char firstmask = 128; 06 unsigned char input; 07 printf(" 0 ~ 255 사이 값중 짝수를 입력하시오.\n"); 08 scanf("%d", &input); 09 printf("입력한 값 %d의 첫번째 비트 %d 이다.\n", 10 input, input & firstmask); 11 printf("입력한 값의 첫번째 비트 값만 바꾸면 입력한 값 은 %d가 된다.\n", input ^ firstmask); 13 printf("입력한 값의 마지막 비트 값을 바꾸면 입력한 값 은 %d가 된다.\n", input | lastmask); 14 return 0; 15 }
【예제 4-11】Ex11.c 02 비트 연산자 예제 01 #include <stdio.h> 02 int main(void) 03 { 04 int a, b, c, d; 05 int x = 10, y = 7; 06 a = x & y; 07 b = x | y; 08 c = x ^ y; 09 d = ~x; 10 printf("논리곱 비트 연산 x & y 의 결과 : %d\n", a); 11 printf("논리합 비트 연산 x | y 의 결과 : %d\n", b); 12 printf("배타적 비트 연산 x ^ y 의 결과 : %d\n", c); 13 return 0; 14 } 표준입력 스트림
【예제 4-12】Ex12.c 02 콤마 연산자 예제 01 #include <stdio.h> 02 int main(void) 03 { 04 int x, y; 05 printf("x = %d, y = %d\n", x = ( y = 5, y + 10), y); 06 07 return 0; 08 } 표준입력 스트림
축약 연산 07 축약 연산 연산자 의 미 사용법 += a와 b를 더해 a에 대입 a += b -= a와 b를 빼 a에 대입 의 미 사용법 += 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 <<= a와 b비트만큼 좌측으로 이동시켜 a에 대입 a <<= b >>= a와 b비트만큼 우측으로 이동시켜 a에 대입 a >>=b &= a와 b를 비트별로 AND 연산하여 a에 대입 a &= b |= a와 b를 비트별로 OR 연산하여 a에 대입 a | = b ^= a와 b를 비트별로 XOR 연산하여 a에 대입 a ^= b
【예제 4-13】Ex13.c 02 축약 연산 예제 01 #include <stdio.h> 02 int main(void) 03 { 04 int a = 10; 05 printf("초기값 : a = 10\n"); 06 a += 5; 07 printf("a += 5 : %d\n", a); 08 a = 10; a -= 5+2; 09 printf("a -= 5+2 : %d\n", a); 10 a = 10; a *= 2+5; 11 printf("a *= 2+5 : %d\n", a); 12 return 0; 13 } 표준입력 스트림
sizeof 연산자 08 sizeof 연산자 변수나 자료형의 바이트 단위 크기를 알고자 할 때 sizeof 연산자를 이용한다. 자료형에 사용 예 sizeof(int) : 결과 값 4 sizeof(double) : 결과 값 8 printf(" %d\n", sizeof(int)); 4 출력 변수에 사용 예 int a; double d; sizeof(a) : 결과 값 4 sizeof d : 결과 값 8 주의 : 변수에 사용할 때는 sizeof 다음에 괄호를 써도 되고 안써도 된다. 그러나, 자료형에는 반드시 괄호를 사용해야 한다.
【예제 4-14】Ex14.c 02 Sizeof 연산자 예제 01 #include <stdio.h> 02 int main(void) 03 { 04 char c = 'a'; 05 int a = 10; 06 double d = 5.0; 07 printf("char 자료형의 바이트 크기는 %d 이다.\n", sizeof(char)); 08 printf("int 자료형의 바이트 크기는 %d 이다.\n", sizeof(int)); 09 printf("double 자료형의 바이트 크기는 %d 이다.\n", sizeof(double)); 10 printf("변수 c의 바이트 크기는 %d 이다.\n", sizeof(c)); 11 printf("변수 a의 바이트 크기는 %d 이다.\n", sizeof a); 12 printf("변수 d의 바이트 크기는 %d 이다.\n", sizeof d); 13 return 0; 14 }
연산자의 우선 순위 09 연산자의 우선 순위 ( )안의 내용을 먼저 처리한다. 단항 연산자가 이항 연산자보다 먼저 처리된다. ( )안의 내용을 먼저 처리한다. 단항 연산자가 이항 연산자보다 먼저 처리된다. 증감 연산자는 위치에 따라 처리되는 순서가 다르지만 대개 좌측에서 우측으로의 실행을 원칙으로 한다. 연산자의 분류에 따른 우선순위 대입 < 조건 < 논리 < 비트 < 관계 < 이동 < 산술 < 단항