Presentation is loading. Please wait.

Presentation is loading. Please wait.

제 3장 연 산 자 연 산 자 의 종 류 연 산 자 우 선 순 위 형 변 환.

Similar presentations


Presentation on theme: "제 3장 연 산 자 연 산 자 의 종 류 연 산 자 우 선 순 위 형 변 환."— Presentation transcript:

1 제 3장 연 산 자 연 산 자 의 종 류 연 산 자 우 선 순 위 형 변 환

2 연산자 식의 의미를 결정: 문장에서 값을 계산 언어와 비슷 좋은 시스템을 작성
연산자(operator), 피연자(operand) 산술식,,관계식, 논리식 // 연산자의 종류 언어와 비슷 연산자는 식의 의미를 결정 좋은 시스템을 작성 언어시스템에서 제공하는 연산자들의 의미와 사용법 습득 자바 언어의 연산자는 표준 C언어의 연산자와 비슷 특히, 수학적인 의미와 구별

3 연산자의 종류 피연산자가 어떻게 계산될지 나타내는 기호(43개) 산술 연산자 : + - * / % 단항+ 단항-
산술 연산자 : * / % 단항+ 단항- 관계 연산자 : > >= < <= == != 논리 연산자 : && || ! 증감 연산자 : 비트 연산자 : & | ^ ~ << >> >>> 자바 언어의 연산자 조건 연산자 : ?: 배정 연산자 : = += -= *= /= %= &= ^= |= >>= <<= >>>= 캐스트 연산자 : (자료형) 배열 연산자 : [] 메소드 연산자 : () . instanceof 연산자 : instanceof

4 산술 연산자 수치 연산을 나타내는 연산자 x = -5 ; x = -(-5) ; x % y = x - (x / y) * y
단항 산술 연산자 : +, - 이항 산술 연산자 : +, -, *, /, % % : remainder opreator(나머지 연산자) 정수형만을 피연산자로 가짐 x % y = x - (x / y) * y x = -5 ; x = -(-5) ; x = -(3-5) ;

5 예제3-1 DivideOperator.java
public class DivideOperator { public static void main(String[] args) { int i; double x; i = 1 / 2; x = 1 / 2; System.out.print("i = " + i); System.out.println(", x = " + x); i = (int) (1 / 2.0); x = 1 / 2.0; }

6 예제3-2 RemainderOperator.java
public class RemainderOperator { public static void main(String[] args) { int n, rem; rem = 10 % 3; n = 10 - (10 / 3 ) * 3; System.out.println("10 % 3 = " + rem); System.out.println("10-(10/3)*3 = " + n); }

7 산술 연산자 실수형 연산 무한연산(infinite arithmetic)
부동 소수점 표현방법과 연산방법 : IEEE754 표준 underflow, overflow 무한연산(infinite arithmetic) java.lang.Float, java.lang.Double에서 POSITIVE_INFINITY, NEGATIVE_INFINITY 상수 제공 NaN(Not a Number)

8 관계 연산자 두 개의 값을 비교하는 연산자 연산자 for, while, ...  우선순위 
연산결과 : true or false 관계 연산자가 포함된 식 : 관계식 for, while, ... 연산자 , , , , ,   우선순위  산술 연산자보다 낮다. b == x < y ===> b == (x < y) a > b + c ===> a > (b + c)

9 예제3-4 RelationalOperators .java
public class RelationalOperators { public static void main(String[] args) { int x=3, y=5, z=7; boolean f, t; f = x > y; t = x < y && y < z; System.out.println("f = " + f + ", t = " + t); f = x <= y; t = x >= y == y >= x; }

10 논리 연산자 두 피연산자의 논리 관계를 나타내는 연산자 연산자 [예제 3.6] 테스트 ! , && , ||
(낮음) (높음) a < b && b < c 1 2 3

11 예제3-5 LogicalOr.java public class LogicalOr {
public static void main(String[] args) { System.out.println("TRUE OR TRUE = " + (true || true)); System.out.println("TRUE OR FALSE = " + (true || false)); System.out.println("FALSE OR TRUE = " + (false || true)); System.out.println("FALSE OR FALSE = " + (false || false)); }

12 예제3-6 LogicalOperators.java
public class LogicalOperators { public static void main(String[] args) { int x=3, y=5, z=7; boolean b; b = x < y && y < z; System.out.println("Result = " + b); b = x == y || x < y && y > z; }

13 증가 및 감소 연산자 연산자 전위 연산자 후위 연산자 (a + b)++ // error n = 1;
++, -- 변수가 아닌 식에는 사용 못함 실수형 적용 안됨 전위 연산자 후위 연산자 (a + b)++ // error n = 1; x = ++n; // x=2, n=2 n = 1; x = n++; // x=1, n=2

14 예제3-7 IncDecOperators.java
public class IncDecOperators { public static void main(String[] args) { int x=3, y=5; int a, b; ++x; --y; System.out.println("x = " + x + " , y = " + y); a = (++x) + 1; System.out.println("x = " + x + " , a = " + a); b = (y++) + 1; System.out.println("y = " + y + " , b = " + b); }

15 << >> >>>
비트 연산자 비트 연산자 비트 단위로 연산 --- 기억장소 절약(자바의 저급언어적 특성) 종류 --- &, |, <<, >>, >>>, ^, ~ 피연산자는 반드시 정수형 우선순위 연산자 우선순위 ~ << >> >>> & ^ | (높음) (낮음)

16 비트 연산자 [1/2] 비트 논리곱 비트 논리합 배타적 논리합(Exclusive OR)
10012 & = 00012 변수의 일정 부분을 매스킹(masking)하여 특정 부분만을 추출하기 위해 사용 비트 논리합 10012 | = 10112 배타적 논리합(Exclusive OR) 10012 ^ = 10102 1의 보수(One’s Complement) ~ =

17 예제3-8 BitOperators.java public class BitOperators {
public static void main(String[] args) { int x=9, y=3; System.out.println(x + " & " + y + " = " + (x&y)); System.out.println(x + " | " + y + " = " + (x|y)); System.out.println(x + " ^ " + y + " = " + (x^y)); System.out.println("~10 = " + (~10)); }

18 비트 연산자 [2/2] 비트 이동 연산자(shift operator) x << y = x * 2y
왼쪽 이동(<<) 오른쪽 이동(>>) 부호없는 오른쪽 이동(>>>) 부호없는 정수(unsigned integer)를 지원하지 않기 때문에 제공 (-1) >>> ? x << y = x * 2y x >> y = x / 2y

19 예제3-9 ShiftOperators.java
public class ShiftOperators { public static void main(String[] args) { System.out.println(" 10 << 2 = " + (10<<2)); System.out.println(" 10 >> 2 = " + (10>>2)); System.out.println(" 10 >>> 2 = " + (10>>>2)); System.out.println("-10 >>> 2 = " + (-10>>>2)); }

20 조건 연산자 조건 연산자 max = x; max = y; x > y 형태 : 식1 ? 식2 : 식3 (3항 연산자)
형태 : 식1 ? 식2 : 식3 (3항 연산자) [예제 3.10] 테스트 --- 교과서 80쪽 max = x > y ? x : y ; if (x > y) max = x; else max = y; 거짓 max = x; max = y; x > y

21 예제3-10 ConditionalOperator.java
public class ConditionalOperator { public static void main(String[] args) throws java.io.IOException { int a, b, c; int m=0; System.out.print("Enter three numbers : "); a = System.in.read() - '0'; b = System.in.read() - '0'; c = System.in.read() - '0'; m = (a > b) ? a : b; m = (m > c) ? m : c; System.out.println("The largest number = " + m); }

22 예제3-11 PrintTenItem.java public class PrintTenItem {
public static void main(String[] args) { int i, n=25; for (i=1; i<=n; ++i) System.out.print(i + ((i%10 == 0 || i==n) ? "\n" : " ")); }

23 배정 연산자 배정 연산자의 형태 결합 연산자 의미 : 식1 = 식1 op 식2 식1 op= 식2 x = x * y + 1;
산술 연산자 : * / % 비트 연산자 : & | ^ << >> >>> 의미 : x = x * y + 1; x *= y + 1; sum = sum + i ; sum += i ; x = x * (y+1)

24 캐스트 연산자 캐스트 연산자 --- 자료형 변환 연산자 (자료형) 식  정수사이의 연산 결과는 정수
형태 : 캐스트 연산자 사용 예 :  정수사이의 연산 결과는 정수 (자료형) 식 (int) ===> 3 (float) ===> 3.0 (float) (1 / 2) ===> 0.0 (float) 1/2 ===> 0.5

25 연산자 우선순위 [1/2] 연산자 결합법칙 우선순위 () [] . 좌측결합 (높음) ! ~ ++ -- 단항+ 단항- (자료형)
연산자 결합법칙 우선순위 () [] . ! ~ 단항+ 단항- (자료형) * / % + - << >> >>> < <= > >= instanceof == != & ^ | && || ? : = += -= *= /= %= &= ^= |= <<= >>= >>>= 좌측결합 (높음) 우측결합 좌측결합 우측결합 (낮음)

26 연산자 우선순위 [2/2] y = x + y - z ; // 좌측 결합 y = -x ; // 우측 결합
y = -x++ ; // x의 값에 단항 – 연산을 적용한 후 y에 배정하고 x를 증가 y = -++x ; // x를 증가한 후 x의 값에 단항 - 연산을 적용한 후 y에 배정 y = -x + z ; // x의 값에 단항 – 연산한 후 z를 더하 고 그 결과를 y에 배정

27 형 변환 [1/6] 캐스팅을 이용하여 프로그래머가 형 변환을 명시 자료형의 크기 방향 형 변환의 주체 묵시적 형 변환
광역화 형 변환 작은 자료형의 값을 큰 자료형의 값으로 변환 협소화 형 변환 큰 자료형의 값을 작은 자료형의 값으로 변환 형 변환의 주체 묵시적 형 변환 컴파일러에 의해 자동수행 명시적 형 변환 캐스팅을 이용하여 프로그래머가 형 변환을 명시

28 형 변환 [2/6] 광역화 형 변환 컴파일러에 의해 자동으로 수행되는 묵시적 변환 예 :
정밀도 상실 : int -> float long -> float, long -> double byte -> short, int, long, float, double short -> int, long, float, double char -> int, long, float, double int -> long, float, double long -> float, double float -> double

29 형 변환 [3/6] 협소화 형 변환 byte -> char short -> byte, char
프로그래머가 반드시 캐스트 연산자를 사용하여 변환될 자료형을 표시하여 변환. 예 : byte -> char short -> byte, char char -> byte, short int -> byte, short, char long -> byte, short, char, int float -> byte, short, char, int, long double -> byte, short, char, int, long, float

30 형 변환 [4/6] 묵시적 형 변환 char c='A'; short s=1; int i=2; long l=3;
컴파일러에 의해 자동적으로 수행 char c='A'; short s=1; int i=2; long l=3; float f=2.1f; double d=3.2; ① i = ( c s ); // i = 66 (int) (char) (short) (short) (int) [예제 3.16] 테스트

31 형 변환 [4/6] l = s + i ; // l = 3 (long) (short) (int) (int) (long)
d = f d; // d = 5.3 (double) (float) (double) (double)

32 형 변환 [5/6] 명시적 형 변환 char c='A'; short s=1; int i=2; long l=3;
프로그래머가 캐스트 연산자를 사용하여 변환 char c='A'; short s=1; int i=2; long l=3; float f=2.1f; double d=3.2; ① s = (short) ( c i ); // s = 67 (short) (char) (int) (int) (short)

33 형 변환 [5/6] f = (float) ( f + d ); // f = 5.3 (float) (float) (double)

34 public class LosePrecision {
[예제3.18-LosePrecision.java] _______________________________________ public class LosePrecision { public static void main(String[] args) throws java.io.IOException { int big = ; float approx; approx = (float) big; System.out.println("difference = " + (big - (int)approx)); System.in.read(); } ________________________________________________________________ 실행결과 : difference = -46

35 형 변환 [6/6] 형 변환 금지 [예제 3.19] 테스트 --- 교과서 93쪽
같은 자료형 이외에 다른 자료형으로의 변환이 금지된 자료형 boolean 형 [예제 3.19] 테스트 --- 교과서 93쪽


Download ppt "제 3장 연 산 자 연 산 자 의 종 류 연 산 자 우 선 순 위 형 변 환."

Similar presentations


Ads by Google