C 4장. 연산자 #include <stdio.h> int main(void) { int num; printf(“Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("Is negative.\n"); printf("num = %d\n", num); return 0; }
■ 연산자의 우선 순위와 결합 방향에 대하여 알아본다. 학습목표 ■ 수식의 개념과 연산자, 피연산자에 대해서 알아본다. ■ C의 연산자의 종류를 알아본다. ■ 연산자의 우선 순위와 결합 방향에 대하여 알아본다. 4장. 연산자
목차 4장. 연산자 연산자의 기본 개념 연산자의 종류 연산자의 우선순위와 결합 방향 수식 연산자와 피연산자 산술 연산자 / 증감 연산자 관계 연산자 / 논리 연산자 비트 연산자 / 대입 연산자 조건 연산자 / 형변환 연산자 연산자의 우선순위와 결합 방향 연산자의 우선순위 연산자의 결합 방향 4장. 연산자
수식(expression) 연산자의 기본개념 값을 갖는 요소 수식의 값을 구하는 것을 ‘수식을 평가한다’고 한다. 연산식 : 연산자를 이용한 수식 연산자(operator)와 하나 이상의 피연산자(operand)로 구성 4장. 연산자
연산자 피연산자 연산자의 기본개념 연산에 사용되는 기호 연산자와 피연산자 연산자 연산에 사용되는 기호 +, -, ++, --, ==, >, <, &&, ||, <<, >> 등 피연산자 연산의 대상이 되는 값 4장. 연산자
연산자의 기본개념 연산자와 피연산자 연산자의 종류(1/2) 피연산자의 개수에 따른 연산자의 종류 4장. 연산자
연산자의 기본개념 연산자와 피연산자 연산자의 종류(2/2) 연산자의 기능에 따른 연산자의 종류 4장. 연산자
연산자의 종류 산술 연산자 산술 연산자 기본적인 사칙 연산 기능을 제공하는 연산자 4장. 연산자
산술 연산자의 사용 예(1/2) 연산자의 종류 산술 연산자 4장. 연산자 01: /* Ex04_01.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int num1, num2; 07: int result; 08: 09: printf("두 개의 정수를 입력하세요 : "); 10: scanf("%d %d", &num1, &num2); 11: 12: result = num1 + num2; 13: printf("%d + %d = %d\n", num1, num2, result); 14: 15: result = num1 - num2; 16: printf("%d - %d = %d\n", num1, num2, result); 17: 더하기 빼기 4장. 연산자
산술 연산자의 사용 예(2/2) 연산자의 종류 산술 연산자 4장. 연산자 18: result = num1 * num2; 19: printf("%d * %d = %d\n", num1, num2, result); 20: 21: result = num1/ num2; 22: printf("%d / %d = %d\n", num1, num2, result); 23: 24: result = num1 % num2; 25: printf("%d %% %d = %d\n", num1, num2, result); 26: 27: return 0; 28: } 곱하기 나누기 나머지 4장. 연산자
나누기 연산자(/) 나머지 연산자(%) 연산자의 종류 산술 연산자 나누기 연산자(/) 정수에 대하여 나누기 연산자(/)를 사용하면, 소수점 이하는 버리고(truncation) 몫을 정수로만 구한다. 나머지 연산자(%) 정수형에 대해서만 사용 가능 4장. 연산자
나머지 연산자의 사용 예 연산자의 종류 산술 연산자 4장. 연산자 01: /* Ex04_02.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int num; 07: int thousands, tens; 08: 09: printf("6자리 정수를 입력하세요 : "); 10: scanf("%d", &num); 11: 12: thousands = num / 1000; 13: tens = num % 1000; 14: printf("%d,%d\n", thousands, tens); 15: 16: return 0; 17: } 나머지 연산자 사용 4장. 연산자
증감 연산자 연산자의 종류 변수의 값을 1만큼 증가시키거나 감소시킨다. 증감 연산자는 반드시 변수에만 사용해야 한다. 전위형과 후위형 4장. 연산자
증감 연산자의 사용 예(1/2) 연산자의 기본개념 증감 연산자 4장. 연산자 01: /* Ex04_03.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int count; 07: int value1, value2; 08: float temperature = 10.5f; 09: 10: count = 10; 11: value1 = ++count; 12: printf("value1 = %d, count = %d\n", value1, count); 13: 14: count = 10; 15: value2 = count++; 16: printf("value2 = %d, count = %d\n", value2, count); 17: 전위형 후위형 4장. 연산자
증감 연산자의 사용 예(2/2) 연산자의 기본개념 증감 연산자 4장. 연산자 18: count = 10; 20: printf("count = %d\n", count); 21: 22: count = 10; 23: count++; 24: printf("count = %d\n", count); 25: 26: temperature++; 27: printf("temperature = %f\n", temperature); 28: 29: return 0; 30: } 전위형 후위형 실수형에도 증감 연산자를 사용할 수 있다. 4장. 연산자
관계 연산자(1/2) 연산자의 종류 두 수의 값을 비교할 때 사용되는 연산자 수식의 값이 항상 참 또는 거짓이 된다. 4장. 연산자
관계 연산자(2/2) 연산자의 종류 두 수의 값이 같은지 비교할 때는 = 연산자가 아니라 == 연산자를 사용해야 한다. 4장. 연산자
관계 연산자의 사용 예 연산자의 종류 관계 연산자 4장. 연산자 01: /* Ex04_04.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int a = 10; 07: int b = 20; 08: 09: printf("a = %d, b = %d\n", a, b); 10: printf("a > b = %d\n", a > b); 11: printf("a >= b = %d\n", a >= b); 12: printf("a < b = %d\n", a < b); 13: printf("a <= b = %d\n", a <= b); 14: printf("a == b = %d\n", a == b); 15: printf("a != b = %d\n", a != b); 16: 17: return 0; 18: } 관계 연산자 4장. 연산자
논리 연산자(1/2) 연산자의 종류 참과 거짓을 이용한 논리 연산 기능을 제공 AND(&&), OR(||), NOT(!) 연산 논리 연산자를 사용하지 않으면 잘못된 수식을 만들 수 있으므로 주의해야 한다. 4장. 연산자
연산자의 종류 논리 연산자 논리 연산자(2/2) 논리 연산자의 연산 결과 4장. 연산자
논리 연산자의 사용 예 연산자의 종류 논리 연산자 4장. 연산자 01: /* Ex04_05.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int score = 95; 07: 08: printf("90점 이상 100점 이하인가? : %d\n", 09: score >= 90 && score <= 100); 10: 11: printf("0점 또는 100점인가? : %d\n", 12: score == 0 || score == 100); 13: 14: printf("0점인가? : %d\n", !score); 16: return 0; 17: } 논리 연산자 논리 연산자 논리 연산자 4장. 연산자
논리 연산자의 우선순위 연산자의 종류 논리 연산자는 관계 연산자보다 우선순위가 낮다. && 연산자가 || 연산자보다 우선순위가 높고, ! 연산자는 관계 연산자보다 우선순위가 높다. 4장. 연산자
비트 AND 연산자(&) 연산자의 종류 각 비트 단위로 AND 연산을 수행 int a = 10; int b = 12; 비트 연산자 비트 AND 연산자(&) 각 비트 단위로 AND 연산을 수행 int a = 10; int b = 12; int c = a & b; 4장. 연산자
16진수와 2진수 변환 연산자의 종류 2진수는 0과 1만을 사용하고, 16진수는 0~9, A~F를 사용한다. 비트 연산자 16진수와 2진수 변환 2진수는 0과 1만을 사용하고, 16진수는 0~9, A~F를 사용한다. 16진수를 2진수로 변환하려면, 16진수 1자리를 이진수 4자리로 나타내면 된다. 4장. 연산자
비트 OR 연산자(|) 연산자의 종류 피연산자의 같은 위치에 있는 비트에 대해서 비트 OR 연산을 수행 int a = 10; 비트 연산자 비트 OR 연산자(|) 피연산자의 같은 위치에 있는 비트에 대해서 비트 OR 연산을 수행 int a = 10; int b = 12; int c = a | b; 4장. 연산자
비트 XOR 연산자(^) 연산자의 종류 피연산자의 같은 위치에 있는 비트에 대해서 비트 XOR 연산을 수행 비트 연산자 비트 XOR 연산자(^) 피연산자의 같은 위치에 있는 비트에 대해서 비트 XOR 연산을 수행 int a = 10; int b = 12; int c = a ^ b; 4장. 연산자
비트 NOT 연산자(~) 연산자의 종류 피연산자의 각 비트를 반전시킨다. 즉, 0은 1로, 1은 0으로 만든다. 비트 연산자 비트 NOT 연산자(~) 피연산자의 각 비트를 반전시킨다. 즉, 0은 1로, 1은 0으로 만든다. int a = 10; int c = ~a; 4장. 연산자
비트 연산자의 사용 예 연산자의 종류 비트 연산자 4장. 연산자 01: /* Ex04_06.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int a = 10; // 0x0a 07: int b = 12; // 0x0c 08: int c; 09: 10: c = a & b; 11: printf("a & b = %08x(%d)\n", c, c); 12: 13: c = a | b; 14: printf("a | b = %08x(%d)\n", c, c); 15: 16: c = a ^ b; 17: printf("a ^ b = %08x(%d)\n", c, c); 18: 19: c = ~a; 20: printf("~a = %08x(%d)\n", c, c); 21: 22: return 0; 23: } 비트 AND 연산자 비트 OR 연산자 비트 XOR 연산자 비트 NOT 연산자 4장. 연산자
10 << 2 비트 이동 연산자(1/2) 연산자의 종류 비트 연산자 비트 이동 연산자(1/2) 비트 왼쪽 이동을 할 때는 왼쪽으로 밀려난 비트가 사라져 버리고, 오른쪽 빈자리에는 0이 채워진다. 비트 왼쪽 이동은 2N을 곱하는 것이다. 10 << 2 4장. 연산자
10 >> 2 비트 이동 연산자(2/2) 연산자의 종류 비트 연산자 비트 이동 연산자(2/2) 비트 오른쪽 이동을 할 때는 오른쪽으로 밀려난 비트가 사라져 버리고, 왼쪽 빈자리에는 부호 비트가 채워진다. 비트 오른쪽 이동은 2N으로 나누는 것이다. 10 >> 2 4장. 연산자
비트 이동 연산자의 사용 예 연산자의 종류 비트 연산자 4장. 연산자 01: /* Ex04_07.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int a = 10; // 0x0a 07: int b; 08: 09: b = a << 2; 10: printf("a << 2 = %08x(%d)\n", b, b); 11: 12: b = a >> 2; 13: printf("a >> 2 = %08x(%d)\n", b, b); 14: 15: return 0; 16: } 비트 왼쪽 이동 연산자 비트 오른쪽 이동 연산자 4장. 연산자
대입 연산자(1/4) 연산자의 종류 대입 연산자(=)는 연산자의 좌변(변수)에 우변의 값을 저장한다. 대입 연산자의 좌변(l-value)에는 반드시 변수만 사용해야 한다. 4장. 연산자
연산자의 종류 대입 연산자 대입 연산자(2/4) 대입 연산을 수행하면, 대입 연산자의 좌변에 있는 l-value의 값이 연산의 결과가 된다. 4장. 연산자
대입 연산자(3/4) 연산자의 종류 대입 연산자는 산술 연산자, 비트 연산자와 결합해서 복합 대입 연산자로 사용될 수 있다. 4장. 연산자
연산자의 종류 대입 연산자 대입 연산자(4/4) 복합 대입 연산자를 다른 연산자와 함께 사용할 때는 복합 대입 연산자는 다른 연산자에 비해서 우선순위가 낮기 때문에 주의해야 한다. 4장. 연산자
대입 연산자의 사용 예 연산자의 종류 대입 연산자 4장. 연산자 01: /* Ex04_08.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int num; 07: 08: num = 5; 09: printf("num = %d\n", num); 10: 11: num += 2; 12: printf("num = %d\n", num); 13: 14: num *= 2; 15: printf("num = %d\n", num); 16: 17: num |= 3; 18: printf("num = %d\n", num); 19: 20: num <<= 2; 21: printf("num = %d\n", num); 22: 23: return 0; 24: } 대입 연산자 복합 대입 연산자 복합 대입 연산자 복합 대입 연산자 복합 대입 연산자 4장. 연산자
연산자의 종류 조건 연산자 조건 연산자 유일한 삼항 연산자 4장. 연산자
조건 연산자의 사용 예 연산자의 종류 조건 연산자 4장. 연산자 01: /* Ex04_09.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int a, b; 07: int min, max; 08: 09: printf("두 개의 정수를 입력하세요 : "); 10: scanf("%d %d", &a, &b); 11: 12: min = a < b ? a : b; 13: max = a > b ? a : b; 14: 15: printf("min = %d, max = %d\n", min, max); 16: 17: return 0; 18: } 조건 연산자 4장. 연산자
암시적인 형 변환 연산자의 종류 컴파일러에 의해서 자동으로 처리되는 형 변환 형 변환이 일어나는 경우 서로 다른 형의 값을 혼합 연산하는 경우 변수에 다른 형의 값을 대입할 때 4장. 연산자
승진에 의한 자동 형 변환 예 연산자의 종류 형 변환 연산자 4장. 연산자 01: /* Ex04_10.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: short a = 500; 07: short b = 800; 08: short c; 09: 10: printf("a * b = %d\n", a * b); 11: 12: c = a * b; 13: printf("c = %d\n", c); 14: 15: return 0; 16: } 승진에 의한 형변환 4장. 연산자
연산자의 종류 형 변환 연산자 승진에 의한 형 변환 4장. 연산자
대입 연산 시 형 변환 예 연산자의 종류 형 변환 연산자 4장. 연산자 01: /* Ex04_11.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int num; 07: double f; 08: 09: num = 3.14; 10: printf("num = %d\n", num); 11: 12: f = 123; 13: printf("f = %f\n", f); 14: 15: return 0; 16: } 대입 연산 시 자동 형변환 대입 연산 시 자동 형변환 4장. 연산자
명시적인 형 변환(1/2) 연산자의 종류 프로그래머가 명시적으로 형 변환을 하고 싶을 때, 형 변환 연산자를 이용한다. 4장. 연산자
명시적인 형 변환(2/2) 연산자의 종류 형 변환 연산자를 사용하면, 연산의 결과가 달라질 수 있으므로 주의해야 한다. 연산 전에 형 변환을 하는지, 연산 후에 형 변환을 하는지에 따라 연산의 결과가 달라질 수 있다. 4장. 연산자
명시적인 형 변환 예(1/2) 연산자의 종류 형변환 연산자 4장. 연산자 01: /* Ex04_12.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int num; 07: float f; 08: 09: f = 10 / 3; 10: printf("f = %f\n", f); 11: 12: f = (float) 10 / 3; 13: printf("f = %f\n", f); 14: 15: f = (float) 10 / (float) 3; 16: printf("f = %f\n", f); 17: int / int로 처리 명시적인 형변환 명시적인 형변환 4장. 연산자
명시적인 형 변환 예(2/2) 연산자의 종류 형변환 연산자 4장. 연산자 18: num = (int) (12.5 + 10.7); 19: printf("num = %d\n", num); 20: 21: num = (int)12.5 + (int)10.7; 22: printf("num = %d\n", num); 23: 24: return 0; 25: } 명시적인 형변환 명시적인 형변환 4장. 연산자
연산자의 우선순위(1/2) 연산자의 우선순위와 결합 방향 단항 > 산술 > 관계 > 논리 > 대입 > 콤마 연산자 우선순위 연산자 결합 방향 1 ( ) [ ] -> . → 2 ++ -- +(부호) -(부호) sizeof ~ ! * & (type) ← 3 * / % 4 + - 5 << >> 6 < <= > >= 7 == != 8 & 9 ^ 10 | 11 && 12 || 13 ?: 14 = += -= *= /= %= &= |= ^= <<= >>= 15 ,(콤마) 4장. 연산자
연산자의 우선순위(2/2) 연산자의 우선순위와 결합 방향 기본적인 연산자의 우선순위와는 다른 순서로 연산을 수행하려면 ( )를 사용한다. 4장. 연산자
연산자의 결합 방향 연산자의 우선순위와 결합 방향 같은 우선순위의 연산자에 대해서 어느 방향으로 연산을 수행할지 여부 4장. 연산자
연산자의 우선순위와 결합 방향 예 연산자의 우선순위와 결합 방향 4장. 연산자 01: /* Ex04_13.c */ 02: #include <stdio.h> 03: 04: int main(void) 05: { 06: int a = 1, b = 2, c = 3; 07: int result; 08: 09: result = a + b * c % 2; 10: printf("result = %d\n", result); 11: 12: result = a > b || c > 0; 13: printf("result = %d\n", result); 14: 15: result = a > b || c > 0 && b > c; 16: printf("result = %d\n", result); 17: 18: result = ++a * b--; 19: printf("result = %d\n", result); 20: 21: result = a = b = c; 22: printf("result = %d\n", result); 23: 24: return 0; 25: } 4장. 연산자
연산자의 기본 개념 학습정리 수식 : C 프로그램에서 값을 갖는 요소 연산자 : +, -, *, /처럼 연산에 사용되는 기호 피연산자 : 연산의 대상이 되는 값 4장. 연산자
연산자의 종류 연산자의 우선 순위와 결합 방향 학습정리 우선 순위 단항 > 산술 > 관계 > 논리 > 대입 > 콤마 결합 방향 : 같은 우선순위의 연산자에 대해서 어느 방향으로 연산을 수행할지 4장. 연산자
4장. 연산자 수고하셨습니다. 질문 있습니까? NEXT Chapter 5장. 제어문