티스토리 뷰

개발/Java Study

3주차 : 연산자

박비버 2021. 2. 3. 21:13

1. 산술 연산자

 + - * / % << >>

사칙연산, 나머지 연산

연산자의 우선순위에 의해서 연산순서가 결정됨

쉬프트 연산자(<<)는 덧셈 연산자보다 우선순위가 낮음

2. 비트 연산자

& | ^ ~ << >>

비트단위로 논리 연산

피연산자 -> 이진수로 표현한 후 각자리를 아래 표와 같이 연산함

x y x|y x&y x^y
1 1 1 1 0
1 0 1 0 1
0 1 1 0 1
0 0 0 0 0
x ~x
1 0
0 1

8<<2 : 10진수 8의 2진수를 왼쪽으로 2자리 이동

8 : 00001000

8<<2 : 00100000

 

x<<n  = x * 2의 n제곱

x>>n = x / 2의 n제곱

3. 관계 연산자

> < >= <= == !=

크고 작음과 같고 다름을 비교

true, false를 반환

숫자 비교

10.0 == 10.0f : true

0.1 == 0.1f : false

0.1 (double 형) 은 0.1f 보다 적은 오차로 저장되므로 false

float f = 0.1f; //    0.10000000149011612

double d = 0.1; // 0.10000000000000001

문자열 비교

String str1 = "abc";
String str2 = new String("abc");

"abc" == "abc" : true
str1 == "abc" : true
str2 == "abc" : false
str2.equals("abc") : true

4. 논리 연산자

&& || ! 

'그리고(AND)'와 '또는(OR)'으로 조건을 연결

x y x||y x&&y
true true true true
true false true false
false true true false
false false false false
x !x
true false
false true

5. instanceof

참조 변수가 참조하고 있는 인스턴스의 실제 타입 확인

참조 변수 instanceof 클래스명

 instanceof로 true가 나오면 참조 변수가 검사한 타입으로 형변환이 가능

6. assignment(=) operator

x = y = 3;

y = 3 먼저 수행 후 y = x 수행된다.

i *= 10 + j;
i = i * (10 + j);

7. 화살표(->) 연산자

JDK1.8 부터 추가됨

객체지향 언어인 동시에 함수형 언어가 됨

int[] arr = new int[5];
Arrays.setAll(arr, (i) -> (int)(Math.random()*5)+1);
int max (int a, int b) {
	return a > b ? a : b;
}
(int a, int b ) -> { return a > b ? a : b; }

return 대신 식(expression) 으로 대신 할 수 있음

(int a, int b) -> a > b ? a : b

추론이 가능한 경우는 매개변수 타입도 생략 가능

(a, b) -> a > b ? a : b

매개 변수가 하나인 경우에 괄호 생략 가능

a -> a * a

 중괄호 안의 문장이 return 문일 경우 괄호 생략 불가능

(int a, int b) -> { return a > b ? a : b; } // 중괄호 생략 불가능

Object 타입으로 형변환 불가능

Object obj = (Object) ( () -> {} ); // 에러

8. 3항 연산자

조건식 ? 식1 : 식2

조건식이 true 인 경우, 연산결과는 식1

조건식이 false 인 경우, 연산결과는 식2

result = ( x > y ) ? x : y ;

괄호는 필수가 아님

if 문으로 바꾸면?

if (x > y)
	result = x;
else
	result = y;

중첩 해서 사용할 수 있다

result = x > 0 ? 1 : (x == 0 ? 0 : -1);

타입이 다른 경우, 이항 연산자 처럼 산술 변환이 발생한다

x = x + ( mod < 0.5 ? 0 : 0.5 ) // 연산결과는 double 타입

 

9. 연산자 우선 순위

1. 산술 > 비교 > 논리 > 대입

2. 단항(1) > 이항(2) > 삼항(3)

3. 모든 연산의 진행방향은 왼쪽 -> 오른쪽, 단항 연산자와 대입 연산자 제외

10. (optional) Java 13. switch 연산자

// java 12 이전
int num = 1;
int returnNum = 0;
switch(num){
     case 1:
     	returnNum = 1;
        System.out.println("1들어옴");
        break;
     case 2:
        returnNum = 2;
        System.out.println("2들어옴");
        break;
     case 3:
        returnNum = 3;
        System.out.println("3들어옴");
        break;
 }
 System.out.println("returnNum : [ " + returnNum + " ]");
//Java 12
returnNum = switch(num){
     case 1 -> 1;
     case 2 -> 2;
     default -> throw new IllegalStateException("Unexpected value: " + num);
};
System.out.println("returnNum : [ " + returnNum + " ]");
//Java13
returnNum = switch(num){
    case 1 : yield 1;
    case 2 : yield 2;
    default : throw new IllegalStateException("unexpected value : " + num);
};
System.out.println("returnNum : [ " + returnNum + " ]");

 

출처 : 

자바의 정석

https://castleone.tistory.com/6

'개발 > Java Study' 카테고리의 다른 글

6주차 : 상속  (0) 2021.02.13
5주차 : 클래스  (0) 2021.02.12
4주차 : 제어문  (0) 2021.02.09
2주차 : 자바 데이터 타입, 변수 그리고 배열  (0) 2021.02.01
1주차 : Java application의 실행 과정  (0) 2021.01.27
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함