1 / 51

4. 연산자의 이해

4. 연산자의 이해. 산술 연산자. 논리 연산자. 1. 3. 이 장에서 다룰 내용. 관계 연산자. 2. 비트 연산자. 4. 연산자 우선순위. 5. 01_ 산술 연산자. 기본적인 연산자. 01 #include &lt;stdio.h&gt; 02 03 int main() 04 { 05 int a, b = 5 , c = 3; 06 07 a = b + c; 08 printf(&quot; %d + %d = %d <br>&quot;, b, c, a );09 10 a = b - c;

Download Presentation

4. 연산자의 이해

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 4. 연산자의 이해

  2. 산술 연산자 논리 연산자 1. 3. 이 장에서 다룰 내용 관계 연산자 2. 비트 연산자 4. 연산자 우선순위 5.

  3. 01_산술 연산자 • 기본적인 연산자

  4. 01 #include <stdio.h> 02 03 int main() 04 { 05 int a, b = 5 , c = 3; 06 07 a = b + c; 08 printf(" %d + %d = %d \n", b, c, a );09 10 a = b - c; 11 printf(" %d - %d = %d \n", b, c, a ); 12 13 a = b * c; 14 printf(" %d * %d = %d \n", b, c, a ); 15 16 a = b / c; 17 printf(" %d / %d = %d \n", b, c, a ); [기본예제 4-1] 산술 연산자 사용 예 더하기 빼기 곱하기 나누기

  5. 18 19 a = b % c; 20 printf(" %d %% %d = %d \n", b, c, a ); 21 } [기본예제 4-1] 산술 연산자 사용 예 나머지

  6. 01_산술 연산자 • 연산자 우선순위 • 괄호 > 곱셈, 나눗셈 > 덧셈, 뺄셈 • 연산자가 모두 동일한 경우에는 왼쪽에서 오른쪽으로 계산 진행(→) • 강제 형변환 • 프로그래머에 의해서형이 변환되는 것 • 변환하려는 변수 또는 상수 앞에 ‘(형이름)’을 붙임 • 캐스트(cast) 연산자 : 기존의 데이터형을 변환하는 연산자

  7. 01 #include <stdio.h> 02 03 int main() 04 { 05 int a = 2 , b = 3 , c = 4; 06 int result1, mok, namugi; 07 float result2; 08 09 result1 = a + b - c; 10 printf(" %d + %d - %d = %d \n", a, b, c, result1 ); 11 12 result1 = a + b * c; 13 printf(" %d + %d * %d = %d \n", a, b, c, result1 ); 14 15 result2 = a * b / (float) c; [응용예제 4-2] 우선순위와 강제 형변환 예 정수형 변수 선언 실수형 변수 선언 더하기와 빼기 더하기와 곱하기 강제 형변환

  8. 16 printf(" %d * %d / %d = %f \n", a, b, c, result2); 17 18 mok = [ ① ] 19 printf(" %d / %d 의 몫은 %d \n", c, b, mok ); 20 21 namugi =[ ② ] 22 printf(" %d / %d 의 나머지는 %d \n", c, b, namugi ); 23 } [응용예제 4-2] 우선순위와 강제 형변환 예 c / b; 몫 구하기 c % b; 나머지 구하기

  9. 01_산술 연산자 • 간단한 연산자 우선순위 • 9행 : + 와 - 연산자 사용 시 우선 순위  우선순위 동일함 • 12행 : + 와 * 연산자 사용 시 우선 순위  * 이 + 보다 우선순위 높음 어떤 것을 먼저 계산하든지 결과는 동일 곱셈 먼저 계산

  10. 01_산술 연산자 • 강제 형변환수행 시(15행)

  11. 01_산술 연산자 • 강제 형변환을 하지 않은 경우

  12. 01_산술 연산자 • 대입 연산자와 증감 연산자 • 대입 연산자 : =, +=, -=, *=, /=, %= • 증감 연산자 : ++, --

  13. 01 #include <stdio.h> 02 03 int main() 04 { 05 int a = 10; 06 07 a++; 08 printf ( " a ++ ==> %d \n", a); 09 10 a--; 11 printf ( " a -- ==> %d \n", a); 12 13 a += 5; 14 printf ( " a += 5 ==> %d \n", a); 15 16 a -= 5; [기본예제 4-3] 대입연산자와 증감연산자 사용 예 a = a + 1 a = a - 1 a = a + 5 a = a - 5

  14. 17 printf ( " a -= 5 ==> %d \n", a); 18 19 a *= 5; 20 printf ( " a *= 5 ==> %d \n", a); 21 22 a /= 5; 23 printf ( " a /= 5 ==> %d \n", a); 24 25 a %= 5; 26 printf ( " a %%= 5 ==> %d \n", a); 27 } [기본예제 4-3] 대입연산자와 증감연산자 사용 예 a = a * 5 a = a / 5 a = a % 5

  15. 01 #include <stdio.h> 02 03 int main() 04 { 05 int a = 10, b; 06 07 b = a++; 08 printf ( " %d \n", b); 09 10 [ ① ] 11 printf ( " %d \n", b); 12 } [응용예제 4-4] 증감 연산자 사용 예 b = a를 수행한 후 b = a + 1 수행 b = ++a; a=a+1를 수행한 후 b =a 수행

  16. a++와 ++a의 차이 7행, 10행 01_산술 연산자

  17. 관계 연산자의 기본 개념 비교 연산자 : 어떤 것이 큰지, 작은지, 같은지 비교 결과는 참(1, true), 거짓(0, false) 주로 조건식에 사용, 단독으로는 쓰이지 않음 관계 연산자 종류 참 : 1 거짓 : 0 a < b = 02_관계 연산자

  18. 01 #include <stdio.h> 02 03 int main() 04 { 05 int a = 100 , b = 200; 06 07 printf(" %d == %d는 %d 이다.\n", a, b, a==b); 08 printf(" %d > %d는 %d 이다.\n", a, b, a>b); 09 printf(" %d < %d는 %d 이다.\n", a, b, a<b); 10 printf(" %d >= %d는 %d 이다.\n", a, b, a>=b); 11 printf(" %d <= %d는 %d 이다.\n", a, b, a<=b); 12 printf(" %d != %d는 %d 이다.\n", a, b, a!=b); 13 printf(" %d = %d는 %d 이다.\n", a, b, a=b); 14 } [기본예제 4-5] 관계 연산자 사용 예 같다 크다 작다 크거나 같다 작거나 같다 같지 않다 대입(?)

  19. 대입 연산자의 작동 13행 : 의도와 다르게 작동 ‘==’ 연산자 대신 ‘=’ 연산자를 사용한 결과 == : 값이 같은지 체크하는 연산자 = : 오른쪽의 값을 왼쪽에 대입하는 연산자 02_관계 연산자

  20. 논리 연산자의 기본 개념 여러 조건을 복합하여 사용 &&(그리고), ||(또는), !(부정) 연산자의 종류와 예 03_논리 연산자 참이 되려면 두 조건이 모두 참이어야 함

  21. 01 #include <stdio.h> 02 03 int main() 04 { 05 int a = 99; 06 07 printf(" AND 연산 : %d \n", (a >= 100) && (a <= 200) ); 08 printf(" OR 연산 : %d \n", (a >= 100) || (a <= 200) ); 09 printf(" NOT 연산 : %d \n", !(a==100) ); 10 } [기본예제 4-6] 논리 연산자 사용 예 ① 그리고(AND) 또는(OR) 부정(NOT)

  22. 01 #include <stdio.h> 02 03 int main() 04 { 05 int a = 100, b = -200; 06 07 printf(" 상수의 AND 연산 : %d \n", a && b ); 08 printf(" 상수의 OR 연산 : %d \n", [ ① ]); 09 printf(" 상수의 NOT 연산 : %d \n", [②]); 10 } [응용예제 4-7] 논리 연산자 사용 예 ② 그리고(AND) a || b 또는(OR) !a 부정(NOT)

  23. 04_비트 연산자 • 비트 연산자 • 정수나 문자 등을 2진수로 변환한 후 각 비트끼리 연산 수행 • 비트 연산자의 종류와 예

  24. 04_비트 연산자 • 비트 논리곱(&) 연산 • 10진수를 2진수로 변환한 후 각 비트에 AND 연산 수행 • 결과 : 2진수로는 00102 , 10진수로는 2 • 두 수의 자릿수가 다를 때는 빈 자리에 0을 채운 후 연산 진행

  25. 01 #include <stdio.h> 02 03 int main() 04 { 05 printf(" 10 & 7 = %d \n", 10 & 7 ); 06 printf(" 123 & 456 = %d \n", 123 & 456 ); 07 printf(" 0xFFFF & 0000 = %d \n ", 0xFFFF & 0000 ); 08 } [기본예제 4-8] 비트 논리곱 연산자 사용 예 10 & 7 수행 123 & 456 수행 FFFF & 0000 수행

  26. 04_비트 연산자 • 비트 논리합(|) 연산 • 10진수를 2진수로 변환한 후 각 비트에 OR 연산 수행 • 결과 : 2진수로는 11112 , 10진수로는 15

  27. 01 #include <stdio.h> 02 03 int main() 04 { 05 printf(" 10 | 7 = %d \n", 10 | 7 ); 06 printf(" 123 | 456 = %d \n", 123 | 456 ); 07 printf(" 0xFFFF | 0000 = %d \n ", 0xFFFF | 0000 ); 08 } [기본예제 4-9] 비트 논리합 연산자 사용 예 10 | 7 수행 123 | 456 수행 FFFF | 0000 수행

  28. 04_비트 연산자 • 비트 배타적 논리합(^) 연산 • 두 값이 다르면 참(1), 같으면 거짓(0) • 결과 : 2진수로는 11012 , 10진수로는 13

  29. 01 #include <stdio.h> 02 03 int main() 04 { 05 printf(" 10 ^ 7 = %d \n", 10 ^ 7 ); 06 printf(" 123 ^ 456 = %d \n", 123 ^ 456 ); 07 printf(" 0xFFFF ^ 0000 = %d \n ", 0xFFFF ^ 0000 ); 08 } [기본예제 4-10] 비트 배타적 논리합 연산자 사용 예 10 ^ 7 수행 123 ^ 456 수행 16진수 FFFF ^ 0000 수행

  30. 01 #include <stdio.h> 02 03 int main() 04 { 05 char a = 'A', b, c; 06 char mask = 0x0F; 07 08 printf(" %X & %X = %X \n", a, mask, a & mask); 09 printf(" %X | %X = %X \n", a, mask, a | mask); 10 11 mask = 'a' - 'A'; 12 13 b = [ ① ] 14 printf(" %c ^ %d = %c \n", a, mask , b); 15 a = [ ② ] 16 printf(" %c ^ %d = %c \n", b, mask , a); 17 } [응용예제 4-11] 비트 연산에 마스크를 사용한 예 마스크 값을 설정 ‘A’ & 0xFF 수행 ‘A’ | 0xFF 수행 a ^ mask; b ^ mask;

  31. 04_비트 연산자 • 마스크(mask)를 사용한 비트 연산 • 6행 • 마스크 값 선언 : 16진수 0x0F16 • 8행 : 마스크를 사용한 비트 논리곱 결과

  32. 04_비트 연산자 • 9행 : 마스크를 사용한 비트 논리합 결과 • 11행 : 마스크 값 선언 • 13행, 15행 : 마스크를 사용하여 ‘a’, ‘A’의 비트 배타적 논리합 수행

  33. 04_비트 연산자 • 비트 부정 연산자(~) • 두 수에 대한 연산이 아니라 비트 하나의 값을 반대로 만듦  1의 보수 • 0 1로 , 1  0으로 • 해당 값의 음수(-) 값을 찾을 때 사용 + 1 = 2의 보수(음수) 1의 보수(각 비트의 값을 반전시킨 값)

  34. 01 #include <stdio.h> 02 03 int main() 04 { 05 int a = 12345; 06 07 printf(" %d \n", ~a + 1); 08 } [기본예제 4-12] 비트 부정 연산자 사용 예 2의 보수 구하기

  35. 04_비트 연산자 • 왼쪽 시프트 연산자(<<) • 나열된 비트를 왼쪽으로 이동시키는 연산자 • 시프트할 때마다 2n(21, 22, 23…)을 곱한 효과 • 2610 의 왼쪽 시프트 연산 예 • 0000 11012로 변환한 후 비트 이동

  36. 01 #include <stdio.h> 02 03 int main() 04 { 05 int a = 10; 06 printf ("%d 를 왼쪽 1회 시프트하면 %d 이다.\n", a, a<<1); 07 printf ("%d 를 왼쪽 2회 시프트하면 %d 이다.\n", a, a<<2); 08 printf ("%d 를 왼쪽 3회 시프트하면 %d 이다.\n", a, a<<3); 09 } [기본예제 4-13] 왼쪽 시프트 연산자 사용 예 왼쪽 시프트시킬 때마다 결과 출력

  37. 04_비트 연산자 • 오른쪽 시프트 연산자(>>) • 나열된 비트를 오른쪽으로 이동시키는 연산자 • 시프트할 때마다 2n(21, 22, 23…)으로 나눈 효과 • 2610 의 오른쪽 시프트 연산 예

  38. 01 #include <stdio.h> 02 03 int main() 04 { 05 int a = 10; 06 printf ("%d 를 오른쪽 1회 시프트하면 %d 이다.\n", a, a>>1); 07 printf ("%d 를 오른쪽 2회 시프트하면 %d 이다.\n", a, a>>2); 08 printf ("%d 를 오른쪽 3회 시프트하면 %d 이다.\n", a, a>>3); 09 printf ("%d 를 오른쪽 4회 시프트하면 %d 이다.\n", a, a>>4); 10 } [기본예제 4-14] 오른쪽 시프트 연산자 사용 예 오른쪽 시프트시킬 때마다 결과 출력

  39. 01 #include <stdio.h> 02 03 int main() 04 { 05 int a = 100, result; 06 07 int i; 08 09 for (i = 1 ; i <= 5 ; i ++) 10 { 11 [ ① ] 12 printf ("%d << %d = %d\n", a, i, result); 13 } 14 15 for (i = 1 ; i <= 5 ; i ++) 16 { 17 [ ② ] 18 printf ("%d >> %d = %d\n", a, i, result); 19 } 20 } [응용예제 4-11] 비트 연산에 마스크를 사용한 예 왼쪽 시프트 연산을 5회 반복하여 출력 result = a << i; 오른쪽 시프트 연산을 5회 반복하여 출력 result = a >> i;

  40. 우선순위가 적용되는 연산자 목록 05_연산자 우선순위

  41. [예제모음_07] 입력된 두 실수의 산술 연산 • 예제설명 • 숫자 실수를 입력받고 두 수의 다양한 연산을 출력하는 프로그램이다. • 나머지를 구하는 식에서는 강제 형변환을 사용한다. 실행결과

  42. 01 #include <stdio.h> 02 03 int main() 04 { 05 float a, b; 06 float result; 07 08 printf("첫번째 계산할 값을 입력하세요 ==> "); 09 scanf("%f", &a); 10 printf("두번째 계산할 값을 입력하세요 ==> "); 11 scanf("%f", &b); 12 13 result = a + b; 14 printf(" %5.2f + %5.2f = %5.2f \n", a, b, result); 15 result = a - b; 16 printf(" %5.2f - %5.2f = %5.2f \n", a, b , result); 예제모음_07 소스 실수 변수 선언 키보드로 실수를 입력받음 키보드로 실수를 입력받음 실수 덧셈 실수 뺄셈

  43. 17 result = a * b; 18 printf(" %5.2f * %5.2f = %5.2f \n", a, b, result); 19 result = a / b; 20 printf(" %5.2f / %5.2f = %5.2f \n", a, b, result); 21 result = (int)a % (int)b; 22 printf(" %d %% %d = %d \n", (int)a, (int)b, (int)result); 23 } 예제모음_07 소스 실수 곱셈 실수 나눗셈 나머지 연산을 위해 강제 형변환

  44. [예제모음_08] 동전 교환 프로그램 • 예제설명 • 입력된 액수만큼 500원, 100원, 50원, 10원짜리 동전으로 교환해주는 프로그램이다. • 동전의 총 개수는 최소화한다. • 고액의 동전을 먼저 바꿔준다. 실행결과

  45. 01 #include <stdio.h> 02 03 int main() 04 { 05 int coin, remain; 06 int c500, c100, c50, c10; 07 08 printf(" ## 교환할 돈은 ? "); 09 scanf("%d", &coin); 10 11 c500 = coin / 500; 12 coin = coin % 500; 13 14 c100 = coin / 100; 15 coin = coin % 100; 16 예제모음_08 소스 동전, 남은 돈 변수 각 동전 개수 변수 교환할 금액 입력 500원짜리 동전 개수 나머지 금액 100원짜리 동전 개수 나머지 금액

  46. 17 c50 = coin / 50; 18 coin = coin % 50; 19 20 c10 = coin / 10; 21 coin = coin % 10; 22 23 printf("\n 오백원짜리 ==> %d 개 \n", c500); 24 printf(" 백원짜리 ==> %d 개 \n", c100); 25 printf(" 오십원짜리 ==> %d 개 \n", c50); 26 printf(" 십원짜리 ==> %d 개 \n", c10); 27 printf(" 바꾸지 못한 잔돈 ==> %d 원 \n", coin); 28 } 예제모음_08 소스 50원짜리 동전 개수 나머지 금액 10원짜리 동전 개수 나머지 금액

  47. [예제모음_09] 윤년 계산 프로그램 • 예제설명 • 입력된 년도가 윤년인지 계산하는 프로그램이다. • 4로 나누어 떨어지고, 100으로 나누어 떨어지지 않으면 윤년 • 400으로 나누어 떨어지는 것도 윤년 실행결과

  48. 01 #include <stdio.h> 02 03 int main() 04 { 05 int year; 06 07 printf("년도를 입력하세요. : "); 08 scanf("%d", &year); 09 10 if ( ((year % 4 == 0) && ( year % 100 != 0 )) || ( year % 400 == 0) ) 11 printf ("%d 년은 윤년입니다. \n", year); 12 else 13 printf ("%d 년은 윤년이 아닙니다. \n", year); 14 } 예제모음_09 소스 키보드로 년도 입력 입력된 년도가 윤년인지 판단하여 출력

  49. 요약 • +, -, *, / 등의 기호로, 계산을 수행하는 기본적인 연산자 • 우선순위 : *, /가 +, -보다 높음, 괄호가 가장 우선 • 캐스트 연산자 : 데이터형을 강제로 바꾸는 연산자 산술 연산자

  50. 요약 대입 연산자 관계 연산자

More Related