똑같은 삽질은 2번 하지 말자

연산자 본문

STUDY HALLE/과제

연산자

곽빵 2021. 1. 10. 18:24

목표

  자바가 제공하는 다양한 연산자를 학습

TodoList

  • 산술 연산자
  • 비트 연산자
  • 관계 연산자
  • 논리 연산자
  • instanceof
  • assignment(=) operator
  • 화살표(->) 연산자
  • 3항 연산자
  • 연산자 우선 순위
  • (optional) Java 13. switch 연산자

 

 

산술 연산자

덧셈, 뺄셈 등 산술 연산을 수행하는 연산자 (+, -, %, /, *)가 있다.

 

public class OperatorExample {
	public static void main(String[] args) {
		int num1 = 25; 
		int num2 = 5;
		System.out.println(num1 + num2); // 30
		System.out.println(num1 - num2); // 20
		System.out.println(num1 / num2); // 5 몫
		System.out.println(num1 % num2); // 0 나머지
		System.out.println(num1 * num2); // 125
	}
}

 

 

 

비트 연산자

비트(bit) 단위로 논리 연산을 할 때 사용하는 연산자

비트 단위로 왼쪽이나 오른쪽으로 전체 비트를 이동하거나, 1의 보수를 만들 때도 사용

여기서 비트 단위란 컴퓨터가 2진수를 기반으로 데이터를 저장하고 연산을 하는데 있어서,

2진수로 표현되는 00010001 (17) 같은 데이터중 하나의 숫자 0 이나 1을 비트단위라고 한다.

 

~ 연산자

  ~ 연산자는 비트를 0이면 1로 1이면 0으로 반전시키는 연산자

 

public static void main(String[] args) {
	int num1 = 17;
	
	System.out.println("num1 : " + num1); // 00000000 00000000 00000000 00010001
	System.out.println(" ~num1 :  " + ~num1); // 11111111 11111111 11111111 11101110
}

 

& 연산자

& 연산자는 두 비트 모두 1일때 1을 반환하는 연산자

public static void main(String[] args) {
	int num1 = 1; // 00000000 00000000 00000000 00000001
	int num2 = 3; // 00000000 00000000 00000000 00000011
	
	System.out.println("num1 & num2 : " + (num1 & num2)); // 00000000 00000000 00000000 00000001
}

 

| 연산자

| 연산자는 두 비트 중 하나라도 1이면 1을 반환하는 연산자

 

public static void main(String[] args) {
	int num1 = 1; // 00000000 00000000 00000000 00000001
	int num2 = 3; // 00000000 00000000 00000000 00000011
	
	System.out.println("num1 | num2 : " + (num1 | num2)); // 00000000 00000000 00000000 00000011
}

^ 연산자

^ 연산자는 두 비트가 다를 때 1을 반환하는 연산자

public static void main(String[] args) {
	int num1 = 1; // 00000000 00000000 00000000 00000001
	int num2 = 3; // 00000000 00000000 00000000 00000011
	
	System.out.println("num1 ^ num2 : " + (num1 ^ num2)); // 00000000 00000000 00000000 00000010
}

<< 연산자, >> 연산자

shift 연산자라고 불리며, 비트를 오른쪽 왼쪽으로 움직이게 해주는 연산자.

public static void main(String[] args) {
	int num1 = 17; // 00000000 00000000 00000000 00010001
	System.out.println("num1 << 2  result: "  + (num1 << 2)); // 00000000 00000000 00000000 01000100
}

 

관계 연산자

비교(관계) 연산자 : >, <, >=, <=, ==, !=

연산자의 왼쪽과 오른쪽의 피연산자들의 크기 관계를 비교하여 참과 거짓을 가리는 연산자

<, >, <=, >= 는 순서대로 미만, 초과, 이하, 이상을 나타내며,

==, !=의 경우에는 두 피연산자의 값이 같은지 다른지 참 또는 거짓을 판별합니다.

 

논리 연산자

&& 연산자

두 피연산자의 값이 모두 true일 경우에 true 값을, 하나라도 false일 경우에는 false 값을 결과로 반환

| | 연산자

두 피연산자 중 하나라도 true일 경우 true 값을 반환. 여기에 비트 연산자(& ^, |)도 포함 되는데 이진수로 변화되어 작업을 수행하는 연산자인데, 주의할 점이 하나있다.

※ 비트연산자와 논리연산자의 동작방식 차이

비트연산자(& , |)를 사용한 if문에서는 피연산자를 무조건 앞 뒤 다 수행,

 

논리연산자를 사용한 if문에서는,

|| 연산자 일때, 선두의 피연산자가 true이면 뒤를 실행하지 않는다.

&& 연산자 일때, 선두의 피연산자가 false이면 뒤를 실행하지 않는다.

 

instanceof

객체 타입을 확인하는데 사용하며, 형변환 가능여부를 반환하는데, 가능하면 true 불가능하면 false를 반환한다.

public class OperatorExample {
	public static void main(String[] args) {
		Hee hee = new Hee();
		
		if (hee instanceof Object) {
			System.out.println("Object Class 형변환가능");
		}
		
		if (hee instanceof Gwak) {
			System.out.println("Gwak Class 형변환가능");
		}
	}
}

class Gwak {
	
}
class Hee extends Gwak {
	
}

assignment(=) operator

대입 연산자(assignment operator)

대입 연산자는 변수에 값을 대입할 때 사용하는 이항 연산자이며, 피연산자들의 결합 방향은 오른쪽에서 왼쪽입니다.

http://www.tcpschool.com/java/java_operator_assignment

화살표(->) 연산자

-> 연산자는 함수적 프로그래밍을 위해 자바 8부터 람다식(Lambda Expressions)을 지원하면서 등장한 연산자

람다식이란 "식별자없이 실행가능한 함수" 인데 함수를 따로 만들지 않고 코드한줄에 함수를 써서 그것을 호출하는 방식

@FunctionalInterface // 자바(standard)가 지원해주는 어노테이션
public interface RunSomething {
	/* 추상 메소드가 하나만 있으면 함수형 인터페이스 
	 abstract는 생략 가능 (@FunctionalInterface가 있으면) */
	abstract void doIt();
}
public class Suo {
	public static void main(String[] args) {
		
		// 익명 내부스 클래스 anonymous inner class
		RunSomething runSomething = () -> {
			System.out.println("hello");
			System.out.println("hi");
		};
			
		Function<Integer,Integer> plus10 = (i) -> i+10;
		Function<Integer,Integer> multiply2 = (i) -> i * 2;
		
		// i가 들어오면 2를 곱하고 그 담에 10을 더한다.
		Function<Integer,Integer> compose = plus10.compose(multiply2);
		
		// plus 다음에 multiply
		Function<Integer,Integer> andThen = plus10.andThen(multiply2);
	}
}

 

3항 연산자

조건연산자( ? : )라고도 하며, if - else 를 축약시킨 연산자라고 생각하면 된다.

(조건) ? 조건에 부합하면 실행 : 조건에 부합하지 않으면 실행

String test = "test"
test.equals("test") ? System.out.print("조건 만족") : System.out.print("조건 불만족");
// 조건 만족

 

연산자 우선 순위

괄호의 우선순위가 제일 높고, 산술 > 비교 > 논리 > 대입의 순서이며, 단항 > 이항 > 삼항의 순서입니다. 연산자의 연산 진행방향은 왼쪽에서 오른쪽으로 수행되며, 단항 연산자와 대입 연산자의 경우에는 오른쪽에서 왼쪽으로 수행됩니다.

https://toma0912.tistory.com/66

(optional) Java 13. switch 연산자

Java 13 switch 연산자? switch 구문이 변경된게 아니라 switch 연산자가 추가된거라고 한다.

 

switch 구문과의 다른점

break가 필요없다.

yield 존재함(return 같은 친구)

return값 존재해도됨

case -> A 같은 형식으로 표현가능

int val = switch (str) {
	case "Hee":
		System.out.println("Hee");
		yield 1; // 1 반환
	case "Gwak":
		System.out.println("Gwak");
		yield 2; // 2 반환
};
Comments