1 / 40

개요 단항 연산자 이항 연산자 삼항 연산자 기타 연산자 연산자의 우선순위와 결합성

ㅎㅎ. 연산자. 개요 단항 연산자 이항 연산자 삼항 연산자 기타 연산자 연산자의 우선순위와 결합성. 3 장 . 연산자. 학습목표 하나의 피연산자에 의해서 연산되는 단항 연산자에 대해서 학습한다 . 두 개의 피연산자에 의해서 연산되는 이항 연산자에 대해서 학습한다. 세 개의 피연산자에 의해서 연산되는 삼항 연산자에 대해서 학습한다 . 연결 연산자와 cast 연산자 등 기타 연산자에 대해서 학습한다. 자바 연산자의 우선 순위와 결합성에 대해서 학습한다. 연산자의 개념

morwen
Download Presentation

개요 단항 연산자 이항 연산자 삼항 연산자 기타 연산자 연산자의 우선순위와 결합성

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. ㅎㅎ 연산자 • 개요 • 단항 연산자 • 이항 연산자 • 삼항 연산자 • 기타 연산자 • 연산자의 우선순위와 결합성 한빛미디어(주)

  2. 3장. 연산자 • 학습목표 • 하나의 피연산자에 의해서 연산되는 단항 연산자에 대해서 학습한다. • 두 개의 피연산자에 의해서 연산되는 이항 연산자에 대해서 학습한다. • 세 개의 피연산자에 의해서 연산되는 삼항 연산자에 대해서 학습한다. • 연결 연산자와 cast 연산자 등 기타 연산자에 대해서 학습한다. • 자바 연산자의 우선 순위와 결합성에 대해서 학습한다.

  3. 연산자의 개념 자바에서 사용되는 연산자(operator)는 변수와 상수 등 데이터 대상에 대해 연산 동작을 행하는 기호들을 말한다. 이때 연산(operation)의 대상이 되는 것을 피연산자(Operand)라고 한다. 연산자의 분류 단항 연산자(Unary Operator) : 하나의 피연산자에 의해서 연산 이항 연산자(Binary Operator) : 두개의 피연산자에 의해서 연산 삼항 연산자(Tenary Operator) : 세개의 피연산자에 의해서 연산 연산자의 우선 순위 괄호 ( )안의 식이 가장 먼저 실행된다. 4칙 연산자는 *, /, +, - 연산자 순으로 실행한다. 좌측에서 우측의 순서로 실행된다. 그러나 = 연산자는 우측에서 좌측으로 실행된다. Section 01개요(1/1)

  4. 단항 음수 연산자 단항 음수 연산자(unary minus operator)에는 -가 있다. 단항 음수 연산자(-)는 피연산자의 부호를 바꿀 때 사용하며 산술 연산자의 뺄셈 연산자(-)와는 다르다. 증가/감소 연산자 증가/감소 연산자(increment/decrement operator)에는 ++, --가 있다. 증가 연산자(++)는 피연산자인 변수의 값을 1 증가시키고 감소 연산자(--)는 피연산자인 변수의 값을 1 감소시킨다. 증가/감소 연산자의 피연산자에는 변수 등에 사용가능하고 상수나 수식에는 적용되지 않는다. 증가 / 감소 연산자는 연산자의 위치에 따라 각각 전위 표기(prefix notation), 후위 표기(postfix notation) 2가지 사용 형식이 있다. 전위 표기는 증가(++)/감소(--) 연산자를 피연산자 앞에 위치하며 그 피연산자의 값을 1 증가/감소시킨 후에 피연산자를 사용한다. 후위 표기는 증가(++)/감소(--) 연산자를 피연산자 뒤에 위치하며 그 피연산자를 사용한 후에 피연산자의 값을 1증가/감소시킨다. 증가/감소 연산자의 결합 규칙은 오른쪽에서 왼쪽으로 결합한다. Section 02단항 연산자(1/1)

  5. [실습하기 3-1]증가/감소 연산자 (1/4)

  6. Jv_3_1.java [실습하기 3-1]증가/감소 연산자 (2/4) 01  class Jv_3_1 { 02   public static void main(String[] args) { 03     int ken=10, yoo=-20, boo; 04     boo=-yoo; 05     System.out.println("***** result *****"); 06     System.out.println("ken=" + ken + "," + 07                        "yoo=" + yoo + "," + 08                        "boo=" + boo); 09     System.out.println("++ken=" + (++ken) + ", ken=" + ken); 10     System.out.println("ken++=" + (ken++) + ", ken=" + ken); 11     System.out.println("--boo=" + (--boo) + ", boo=" + boo); 12     System.out.println("boo--=" + (boo--) + ", boo=" + boo); 13   } 14  }

  7. 프로그램 구조 설명 [실습하기 3-1]증가/감소 연산자 (3/4) 03행: 변수 ken, yoo, boo를 선언하고 ken에 상수 10, yoo에 -20을 초기화한 것이다. 04행: 단항 음수 연산자(-) yoo의 값, 즉 -20을 20으로 바꾸어서 boo에 대입하는 대입문 이다. 09행: 증가 연산자: 전위 표기. 증가/감소 연산자는 연산자의 위치에 따라 각각 전위 표기(prefix notation), 후위 표기(postfix notation) 2가지 사용 형식이 있다. 전위 표기는 증가(++)/감소(--) 연산자를 피연산자 앞에 위치하며 그 피연산자의 값을 1 증가/감소시킨 후에 피     연산자를 사용한다. 예를 들면, System.out.println("++ken=" + (++ken) + ", ken=" + ken);에서 (++ken)은 현재 값 10에 그 피연산자의 값을 1 증가한 11이 된다. 즉, ken은 11이 된다. 10행: 증가 연산자: 후위 표기. 증가/감소 연산자는 연산자의 위치에 따라 각각 전위 표기(prefix notation), 후위 표기(postfix notation) 2가지 사용 형식이 있다. 후위 표기는 증가(++)/감소(--) 연산자를 피연산자 뒤에 위치하며 그 피연산자를 사용한 후에 피연산자의 값을 1     증가/감소시킨다. 예를 들면, System.out.println("ken++=" + (ken++) + ", ken=" + ken);에서   (ken++) 현재값 11을 출력한 후에 11이 1증가되어 12가 된다. 이 값이 ken에 저장된다.

  8. 프로그램 구조 설명 [실습하기 3-1]증가/감소 연산자 (4/4) 11행: 감소 연산자: 전위 표기. 증가/감소 연산자는 연산자의 위치에 따라 각각 전위 표기(prefix notation), 후위 표기(postfix notation) 2가지 사용 형식이 있다. 전위 표기는 증가(++)/감소(--) 연산자를 피연산자 앞에 위치하며 그 피연산자의 값을 1 증가/감소시킨 후에 피     연산자를 사용한다. 예를 들면, System.out.println("--boo=" + (--boo) + ", boo=" + boo);에서 (--boo)은 현재 값 20에 그 피연산자의 값을 1 감소한 19가 된다. 즉, boo은 19가 된다. 12행: 감소 연산자: 후위 표기. 증가/감소 연산자는 연산자의 위치에 따라 각각 전위 표기(prefix notation), 후위 표기(postfix notation) 2가지 사용 형식이 있다. 후위 표기는 증가(++)/감소(--) 연산자를 피연산자 뒤에 위치하며 그 피연산자를 사용한 후에 피연산자의 값을 1 증가/감소시킨다. 예를 들면, System.out.println("boo--=" + (boo--) + ", boo=" + boo);에서 (boo--)은 현재 값 19를 출력한 후에 19에 1감소되어 18이 된다. 이 값이 boo에 저장된다.

  9. 산술 연산자 산술 연산자(arithmetic operator)에는 +, -, *, /, %가 있다. 산술 연산자는 컴퓨터에서 4칙 연산 등을 하는 연산자다. 피연산자는 변수, 상수, 또는 수식이 올 수 있다. /(나눗셈) 연산자는 좌측 피연산자를 우측 피연산자로 나누었을 때의 몫이다. %(나머지) 연산자는 좌측 피연산자를 우측 피연산자로 나누었을 때의 나머지이다. Section 03이항 연산자(1/6)

  10. [실습하기 3-2]산술 연산자 (1/3)

  11. Jv_3_2.java [실습하기 3-2]산술 연산자 (2/3) 01  class Jv_3_2 { 02   public static void main(String[] args) { 03     int x=100, y=30; 04  05     System.out.println("***** result *****"); 06     System.out.println("x+y =" + (x+y)); 07     System.out.println("x-y =" + (x-y)); 08     System.out.println("x*y =" + (x*y)); 09     System.out.println("x/y =" + (x/y)); 10     System.out.println("x%y =" + (x%y)); 11     System.out.println("y^3 =" + (y*y*y)); 12    } 13  }

  12. 프로그램 구조 설명 [실습하기 3-2]산술 연산자 (3/3) 03행: 변수 x, y는 정수형이고 초기값은 각각 상수 100, 30이다. 06행: 산술 연산자 + 이용, 즉 100+30=130을 출력한다. 07행:산술 연산자 - 이용, 즉 100-30=70을 출력한다. 08행:산술 연산자 * 이용, 즉 100*30=3000을 출력한다. 09행:산술 연산자 / 이용, 즉 100/30=3을 출력한다. 10행:산술 연산자 % 이용,  즉 100%30=10을 출력한다. 즉 나머지가 10이다. 11행:지수 연산자가 없기 때문에 *(곱셈 연산자)를 이용한다.

  13. 관계 연산자 관계 연산자(relational operator)는 일명 비교 연산자라고도 부른다. 관계 연산자에는 ==, !=, >, >=, <, <=가 있다. 관계 연산자는 두 수식 간의 대소 비교에 사용하는 연산자다. 두 개의 피연산자의 대소 관계를 비교하여 참인 경우는 true, 거짓인 경우는 false 값을 갖는다. ==와 =의 구별에 유의해야 한다. ==연산자: 좌측 피연산자와 우측 피연산자의 값이 같은 가를 비교한다. =연산자(대입연산자): 우측 피연산자의 값을 좌측 피연산자에 대입한다. <= 연산자와 >= 연산자를 각각 =<와 =>로 표현할 수 없다. Section 03이항 연산자(2/6)

  14. [실습하기 3-3]관계 연산자 (1/3)

  15. Jv_3_3.java [실습하기 3-3]관계 연산자 (2/3) 01  class Jv_3_3 { 02   public static void main(String[] args) { 03     int x=50, y=30; 04  05     System.out.println("***** result *****"); 06     System.out.println("x<y  ->" + (x<y)); 07     System.out.println("x<=y ->" + (x<=y)); 08     System.out.println("x>y  ->" + (x>y)); 09     System.out.println("x>=y ->" + (x>=y)); 10     System.out.println("x==y ->" + (x==y)); 11     System.out.println("x!=y ->" + (x!=y)); 12     } 13  }

  16. 프로그램 구조 설명 [실습하기 3-3]관계 연산자 (3/3) 03행: x와  y는 정수형 변수이고 초기 값은 각각 상수 50, 30이다. 05-11행: 관계 연산자 이용. 관계 연산자에는 <(작다), <=(작거나 같다), >(크다), >=(크거나 같다), ==(같다), !=(같지 않다)의 6종류이다. 관계 연산자의 반환 값(return value)은 참일 때는 true, 거짓일 때는 false이다.

  17. 논리 연산자 논리 연산자(logical operator)에는 &&, ||, !이 있다. 논리 연산자는 논리식의 참과 거짓을 판정하는 데 사용하는 연산자다. 논리 연산자 &&(logicalAND: 논리곱), ||(logical OR: 논리합)은 2개의 피연산자가 필요한 이항 연산자이지만 !(logical NOT: 논리부정)은 한개의 피연산자만 필요한 단항 연산자다. (예)       true && false 의 결과는 false true || false 의 결과는  true            !!true의 결과는          true         !true의 결과는           false 주의할 점은 다른 언어와는 다르게 이 연산자의 좌우에는 boolean 형의 변수, 또는 결과가 true나 false로 표시할 수 있는 수식을 사용해야 한다. Section 03이항 연산자(3/6)

  18. [실습하기 3-4]논리 연산자 (1/3)

  19. Jv_3_4.java [실습하기 3-4]논리 연산자 (2/3) 01  class Jv_3_4 { 02   public static void main(String[] args) { 03     boolean x=true, y=true, z=false; 04  05     System.out.println("***** result *****"); 06     System.out.println("boolean x=true, y=true, z=false"); 07     System.out.println("--- logical AND ---"); 08     System.out.println("x&&y ->" + (x&&y)); 09     System.out.println("y&&z ->" + (y&&z)); 10     System.out.println("--- logical OR ---"); 11     System.out.println("x||y ->" + (x||y)); 12     System.out.println("y||z ->" + (y||z)); 13     System.out.println("--- logical NOT ---"); 14     System.out.println("!x   ->" + (!x)); 15     System.out.println("!y   ->" + (!y)); 16     System.out.println("!z   ->" + (!z)); 17     } 18  }

  20. 프로그램 구조 설명 [실습하기 3-4]논리 연산자 (2/3) 03행: 변수 x, y, z를 선언하고 각각 true, true, false로 초기화한 것이다. boolean x=true, y=true, z=false;에서 주의할 점은 boolean 형 변수로 선언한다. 08행: x&&y는 x와 y의 logical AND(논리곱)을 구한다.  x&&y는 true이다. 09행: y&z는 y와 z의 logical AND(논리곱)을 구한다. y&&z는 false이다. 11행: x||y는 x와 y의 logical OR(논리합)을 구한다. x||y는 true이다. 12행: y||z는 y와 z의 logical OR(논리합)을 구한다. y||z는 true이다. 14행: !은 부정을 표시한다. !x는 x가 true이면 false가 된다. 15행: !은 부정을 표시한다. !y는 y가 true이면 false가 된다. 16행: !은 부정을 표시한다. !z는 z가 false이면 true가 된다.

  21. 비트 연산자 비트 연산자(bitwise operator)에는 &, |, ^, ~, <<, >>, >>> 등이 있다. 비트 연산자는 비트(bit)를 직접 조작하는 데 사용하는 연산자다. 피연산자는 반드시 정수형이어야 한다. 대부분의 문자나 수를 2진수 (0과 1 포함)로 바꾸어서 연산한다. 비트연산자는 저급 언어(assembly language)나 C에서만 취급할 수 있었던 비트처리를 자바에서도 가능하게 하였다. 비트 연산자에는 비트별 논리 연산자(bitwise logical operator)와 이동 연산자(shift operator)가 있다. 비트별 논리 연산자: &(bitwise AND: 비트곱), |(bitwise OR: 비트합), ^(bitwise XOR: 배타적 논리합), ~(bitwise NOT: 비트부정) 이동 연산자:<<(left shift: 왼쪽으로 이동), >>(right shift: 오른쪽으로 이동) Section 03이항 연산자(4/6)

  22. 비트 연산자 왼쪽 이동( << ) 연산자는 왼쪽 피연산자를 오른쪽 피연산자만큼 왼쪽으로 이동시킨 값이다. 이 때 이동 후에 빈칸의 오른쪽 비트에는 모두 0(zero)으로 채우며, 범위를 넘어간 비트들은 무시한다. 오른쪽 이동 ( >> ) 연산자는 왼쪽 피연산자를 오른쪽 피연산자 만큼 오른쪽으로 이동 시킨 값이다.  이때 왼쪽 피연산자가 양수인 경우는 이동 후에 빈 칸의 왼쪽 비트에는 모두 0으로 채우며, 범위를 넘어간 비트들은 무시된다. 또한 왼쪽 피연산자가 음수인 경우는 이동 후에 빈 칸의 왼쪽 비트에는 모두 1로 채우며(산술이동이라 함. 단,0으로 채우는 경우를 논리 이동이라 함), 범위를 넘어간 비트들은 무시한다.  음수를 2진수로 표현할 때는 2의 보수(2‘s complement) 방법을 사용한다. 단, >>> 연산자인 경우에는 이동 후에 최상위 비트에 0을 적용한다. Section 03이항 연산자(5/6)

  23. [실습하기 3-5]비트 연산자 (1/4)

  24. Jv_3_5.java [실습하기 3-5]비트 연산자 (2/4) 01  class Jv_3_5 { 02   public static void main(String[] args) { 03     int ken=2, boo=7, yoo=-7; 04  05     System.out.println("***** result *****\n"); 06     System.out.println("ken=2, boo=7, yoo=-7"); 07     System.out.println("--- bitwise AND ---"); 08     System.out.println("ken&boo -> " + (ken&boo)); 09     System.out.println("--- bitwise OR ---"); 10     System.out.println("ken|boo -> " + (ken|boo)); 11     System.out.println("--- bitwise XOR ---"); 12     System.out.println("ken^boo -> " + (ken^boo)); 13     System.out.println("--- complement ---"); 14     System.out.println("~ken    -> " + (~ken));

  25. Jv_3_5.java [실습하기 3-5]비트 연산자 (3/4) 15     System.out.println("--- shift ---"); 16     System.out.println("boo<<2  -> " + (boo<<2)); 17     System.out.println("boo>>2  -> " + (boo>>2)); 18     System.out.println("yoo<<3  -> " + (yoo<<3)); 19     System.out.println("yoo>>3  -> " + (yoo>>3)); 20     } 21  }

  26. 프로그램 구조 설명 [실습하기 3-5]비트 연산자 (4/4) 03행: 정수형 변수 x에 2, y에 7, z에 -7을 초기화한 것이다. 08~14행:  비트 연산자에는 비트별 논리 연산자(bitwise logical operator)와 이동 연산자(shift operator)가 있다. 대표적인 비트별 논리 연산자는 다음과 같다. • &(bitwise AND: 비트곱), |(bitwise OR: 비트합), • ^(bitwise XOR: 배타적 논리합), • ~(bitwise NOT: 비트부정)

  27. 복합 대입 연산자 복합 대입 연산자(compound assignment operator)에는 +=, -=, *=, /*, %=, &=, |=, ^= 등이 있다. 복합 대입 연산자는 일반연산자 표현을 간결하게 줄여 사용한 표현이다. 예를 들면, 복합 대입 연산자  a += b의 표현은 일반 연산자 a= (a+b)표현과 동일한 결과를 갖는다. 즉, 연산자 좌측과 우측을 더하여 그 결과를 좌측에 대입하라는 의미다. 복합 대입 연산자의 장점은 컴파일 시간을 줄일 수 있을 뿐만 아니라 프로그램이 간결해질 수 있다. Section 03이항 연산자(6/6)

  28. [실습하기 3-6]복합 대입 연산자 (1/3)

  29. Jv_3_6.java [실습하기 3-6]복합 대입 연산자 (2/3) 01  class Jv_3_6 { 02   public static void main(String[] args) { 03     int x=7, y=2; 04     int a, b; 05     a = 7; 06     b= 2; 07  08     System.out.println("***** result *****\n"); 09     System.out.println("x=" + x + ", y=" + y); 10     System.out.println("a=" + a + ", b=" + b); 11     System.out.println("x+=y -> " + (x+=y) + ",  a=a+b -> " + (a=a+b)); 12                        13     System.out.println("x-=y -> " + (x-=y) + ",  a=a-b -> " + (a=a-b)); 14                        15     System.out.println("x/=y -> " + (x/=y) + ",  a=a/b -> " + (a=a/b)); 16                        17     System.out.println("x%=y -> " + (x%=y) + ",  a=a%b -> " + (a=a%b)); 18                        19     } 20  }

  30. 프로그램 구조 설명 [실습하기 3-6]복합 대입 연산자 (3/3) 03행: 정수형 변수 x, y를 초기화한다. 04행: 정수형 변수 a, b를 선언한다. 변수 a에 상수 7을 저장하는 대입문이다. 변수 b에 상수 2를 저장하는 대입문이다. 11행: x+=y는 복합 대입 연산자로서 x=(x+y)와 같은 결과가 된다. 13행: x-=y는 복합 대입 연산자로서 x=(x-y)와 같은 결과가 된다. 15행: x/=y는 복합 대입 연산자로서 x=(x/y)와 같은 결과가 된다. 17행: x%=y는 복합 대입 연산자로서 x=(x%y)와 같은 결과가 된다.

  31. 조건 연산자 조건 연산자(conditional operator)에는 ?:가 있다. 조건 연산자는 세 개의 피연산자를 사용하는 3항 연산자다. 조건 연산자의 형식은 동일한 의미의 if-else 문으로 표현할 수 있다. (예) c = (a>b) ? a : b;  /* 조건 연산자에 의한 표현 */                      /* a가 b보다 크면 c = a를 실행하고 그렇지 */                     /* 않으면 c=b를 실행하라는 의미다.      */ if (a>b)    /* c= (a>b) ? a : b;와 동일한 의미의       */ c = a;           /* if-else 문 표현이다.                     */ else            /* a가 b보다 크면 c = a를 실행하고 그렇지 */ c = b;           /* 않으면 c=b를 실행하라는 의미다.      */ 조건 연산자의 장점은 프로그램이 간결해질 수 있다. 그러나 이해하기 어려운 점도 있다. Section 04삼항 연산자(1/1)

  32. [실습하기 3-7]조건 연산자 (1/3)

  33. Jv_3_7.java [실습하기 3-7]조건 연산자 (2/3) 01  class Jv_3_7 { 02   public static void main(String[] args) { 03     int x=10, y=20, ken, boo, yoo, soo; 04     ken=boo=30; 05     yoo = (ken == boo ? x: y); 06     soo = (ken <  boo ? x: y); 07  08     System.out.println("***** result *****\n"); 09     System.out.println("yoo = " + yoo + ",  soo = " + soo); 10     } 11  }

  34. 프로그램 구조 설명 [실습하기 3-7]조건 연산자 (3/3) 04행: 변수 ken, boo에 상수 30을 저장하는 대입문 05행: 조건 연산자. ken과 boo를 비교해서 같으면 x의 값을 yoo에 대입하고 ken과 boo가 같지 않으면 y의 값을 yoo에 대입한다. 여기서는 ken과 boo가 같으므로 10을 yoo에 대입한다. 06행: 조건 연산자. ken과 boo를 비교해서 작으면 x의 값을 soo에 대입하고 ken과 boo가 작지 않으면 y의 값을 soo에 대입한다. 여기서는 ken과 boo가 같으므로 20을 soo에 대입한다.

  35. 연결 연산자 연결 연산자(concatenation operator)는 +이 있다. 연결 연산자(+)는 문자열을 결합하여 하나의 문자열을 반환(return)한다 cast 연산자 cast 연산자(cast operator)는 ( )를 사용한다 cast 연산자는 이미 지정된 데이터형을 다른 데이터형으로 강제적으로 바꾸고자할  때 사용하는 연산자다. 이 때, 해당 문만 바꾸어준다. (예) ken=(int)(1.23+2.34); /* x에 3.57이 기억되지 않고 3이 기억됨 */ cast 연산자는 단항연산자로서 이항 연산자인 산술연산자보다 연산 우선순위가 높다. (예) (float)(i+5)와 (float)i+5은 다른 의미다.      (float)i+5은 ((float)i)+5로 해석된다. Section 05기타 연산자(1/1)

  36. [실습하기 3-8]cast 연산자 (1/3)

  37. Jv_3_8.java [실습하기 3-8]cast 연산자 (2/3) 01  class Jv_3_8 { 02   public static void main(String[] args) { 03     int x, y; 04     float c, d; 05  06     x = 10; 07     y = 3; 08     c = x/y; 09     d = (float)x/y; 10     System.out.println("***** result *****"); 11     System.out.println("c == " + c + ",  d == " + d); 12     } 13  }

  38. 프로그램 구조 설명 [실습하기 3-8]cast 연산자 (3/3) 03행: 정수형 변수 x, y를 각각 선언한 것이다. 08행: x, y가 정수형이므로 x/y도 정수형이다. 즉 3이 되고 실수형 c에 대입하면 실수형으로 변한다. 09행: cast 연산자를 사용하면 x의 값 10이 강제적으로 실수형으로 먼저 변환한 후에 연산이 된다.

  39. 연산자의 우선 순위와 결합성 수학처럼 자바 언어에서도 연산자들 간에는 연산자의 우선순위(precedence)와 결합성이 있다. 높은 우선순위의 연산자가 먼저 실행되고 우선순위가 같은 경우에 결합성에 따라 실행된다 Section 06연산자의 우선 순위와 결합성(1/1)

More Related