Java 연산자

Purple·2021년 9월 7일
0

JAVA

목록 보기
3/8

1. 산술 연산자

기본적으로 더하기, 빼기, 곱하기, 나누기, 나머지 연산자 등이 존재한다.

더하기 : +

숫자를 더하거나, 문자를 연결시킬 수 있는 연산자이다.

빼기 : -

숫자를 뺄 수 있는 연산자이다.

곱하기 : *

숫자를 곱할 수 있는 연산자이다.

나누기 : /

숫자를 나눌 수 있는 연산자이다.
0으로 나누게 되면 ArithmeticException이 발생한다.

나머지 연산자 : %

숫자를 나누고 남은 나머지를 나타내는 연산자이다.

2. 비트 연산자

각 비트 연산을 정확히 이해하기 위해서는, 컴퓨터의 경우 맨왼쪽의 비트가 1일 경우에 이를 음수로 인식하여 2의 보수 작업을 진행한다는 것을 알고 있어야 한다.

2의 보수

2의 보수 작업이란, 간단히 1의 보수 작업을 진행한뒤 1을 더해주는 것을 말한다.
여기서 1의 보수 작업이란 비트를 반전시키는 것과 같은 작업이다.

예를들어 1001에 대해서 살펴보자
가장 왼쪽의 비트가 1이기때문에 이는 음수이다.
음수이기때문에, 2의 보수 작업을 진행해보자.
1의 보수 : 0110
2의 보수 : 1의 보수에 1을 더한 것 : 0111
결과적으로 이는 -7인 것이다.

not 연산자 : ~

각 비트를 1이면 0으로, 0이면 1로 변환시켜준다.

위의 결과를 자세히 살펴보면 다음과 같다.
2를 비트로 표현하면, 양의 정수이므로 010이다.
010에 대한 not 연산자를 적용하면, 101이다.

101은 가장 왼쪽의 비트가 1이기 때문에 숫자는 음수이다.
음수이기때문에, 2의 보수의 작업을 진행해보자.
1의 보수 : 010
2의 보수 : 011
결과적으로 이는 -3이다.

and 연산자 : &

두 개의 비트가 모두 1일때만 1을 리턴하고, 아니면 0을 리턴한다.

or 연산자 : |

두 비트중 하나라도 1이면 1을 리턴하고, 둘다 0일때 0을 리턴한다.

xor 연산자 : ^

두 비트가 다를때 1을 리턴하고, 같으면 0을 리턴한다.

left shift 연산자 : <<

해당 수만큼 왼쪽으로 비트 전체를 이동 시킨다.
결과적으로만 보면, 2를 곱하는 연산과 같다고 볼 수 있다.

right shift 연산자 : >>

해당 수만큼 오른쪽으로 비트 전체를 이동 시킨다.
양수인 경우에는, 가장 왼쪽 비트가 0으로 채워진다.
음수인 경우에는, 가장 왼쪽 비트가 1로 채워진다.
결과적으로만 보면, 2로 나누는 연산과 같다고 볼 수 있다.

unsigned right shift 연산자

음수 양수 관계없이, 왼쪽 비트를 0으로 채운다.

3. 관계 연산자

==, !=

== : 값이 같다면 true, 아니면 false
!= : 값이 다르면 true, 같으면 false

<, <=

>, >=

4. 논리 연산자

조건부 AND : &&

모두 true일때 true이고, 하나라도 false라면 false이다.

조건부 OR : ||

하나라도 true라면 true이다.

5. intanceof

객체 또는 배열의 값이 어떠한 유형인지 알려주는 연산자이다.
Primitive Type은 피비교의 대상이 될 수 없다.
피비교의 대상이 되는 것 instanceof 비교의 기준이 되는 것

interface Ex_interface {}
class Example_class1 implements Ex_interface {}
class Example_class2 {}


public class study {
	public static void main(String[] args) {
		Example_class1 ex1 = new Example_class1();
		Example_class2 ex2 = new Example_class2();
		
		System.out.println("Example_class1 instanceof Ex_interface : " + (ex1 instanceof Ex_interface)); // true
		System.out.println("Example_class2 instanceof Ex_interface : " + (ex2 instanceof Ex_interface)); // false
	}

}

6. assignment(=) operator

할당 연산자라고 부른다.
해당 할당 연산자를 기준으로, 오른쪽의 피연산자를 왼쪽의 피연산자로 할당한다.

int ex_variable = 10; // 10

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

람다가 도입되면서 사용되기 시작한 연산자이다.
짧게 글로 설명하자면, 화살표 왼쪽에는 메소드에서 사용할 매게변수를 괄호() 안에 나열한다.
그리고 화살표 오른쪽에는 해당 매개변수를 활용하여 처리하는 코드 부분을 작성한다.

interface Test {
	int test_function(int a);
}
public class study {
	public static void main(String[] args) {
		Test test = (a) -> {
			return a+1;
		};
		System.out.println(test.test_function(2)); // 3
	}

}

8. 3항 연산자

기본적인 구조는 다음과 같다.
<조건> ? <if 조건이 참> : <if 조건이 거짓일 때>
다음의 두 코드는 같은 동작을 한다.

public class study {
	public static void main(String[] args) {
		int num1 = 6;
		if(num1 > 5) num1 *= 2;
		else num1 /= 2;
		System.out.println(num1);
		
		int num2 = 6;
		System.out.println(num2 > 5 ? (num2 *= 2) : (num2 /=2));
	}

}

9. 연산자 우선 순위


연산자의 우선순위는 위와 같다.

이러한 연산자의 우선순위가 헷갈린다면, 자신이 의도하는 연산자의 우선순위에 따라 괄호()를 활용하는 편이 좋다

profile
안녕하세요.

0개의 댓글