-
[Java Study] - 연산자 , 연산자의 종류Java 2021. 9. 23. 15:53
연산자
- 연산자 : 연산을 수행하는 기호
- 피연산자 : 연산자의 연산 수행 대상
산술 연산자(arithmetic operator)
- 산술 연산자는 사칙연산을 다루는 연산자로, 가장 기본적이면서도 가장 많이 사용되는 연산자 중 하나이다.
- 산술 연산자는 모두 두 개의 피 연산자를 가지는 이항 연산자이며, 피 연산자들의 결합 방향은 왼쪽에서 오른쪽이다.
산술 연산자 설명 + 왼쪽의 피연산자에 오른쪽의 피연산자를 더함. - 왼쪽의 피연산자에서 오른쪽의 피연산자를 뺌. * 왼쪽의 피연산자에 오른쪽의 피연산자를 곱합. / 왼쪽의 피연산자를 오른쪽의 피연산자로 나눔. % 왼쪽의 피연산자를 오른쪽의 피연산자로 나눈 후 , 그 나머지를 반환함. 비트 연산자
- 비트(bit) 단위로 논리 연산을 할 때 사용하는 연산자
- 비트 단위로 왼쪽이나 오른쪽으로 전체 비트를 이동하거나, 1의 보수를 만들 때도 사용된다.
비트 연산자 설명 & 대응되는 비트가 모두 1이면 1을 반환함. (비트 AND 연산) | 대응되는 비트 중에서 하나라도 1이면 1을 반환함(비트 OR 연산) ^ 대응되는 비트가 서로 다르면 1을 반환함(비트 XOR 연산) ~ 비트를 1이면 0으로, 0이면 1로 반전시킴.(비트 NOT 연산, 1의 보수) << 명시된 수만큼 비트들을 전부 왼쪽으로 이동시킴(left shift 연산) >> 부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킴.(right shift 연산) >>> 지정한 수만큼 비트를 전부 오른쪽으로 이동시키며, 새로운 비트는 전부 0이 됨. 비트 AND 연산자
비트 OR 연산자
비트 XOR 연산자
비트 NOT 연산자
비트 left shift 연산
- 지정한 수 만큼 피연산자의 모든 비트를 전부 왼쪽으로 이동시킨다.
- 비트의 이동으로 새로 생기는 오른쪽 비트들은 언제나 0으로 채워진다.
- 모든 비트가 한 비트씩 왼쪽으로 이동할 때마다 그 값은 2배씩 증가한다.
비트 right shift 연산
- 지정한 수만큼 피연산자의 모든 비트를 전부 오른쪽으로 이동시킨다.
- 비트의 이동으로 새로 생기는 왼쪽 비트들은 양수일 경우에 모두 0으로, 음수일 경우에 모두 1로 채워진다.
- 모든 비트가 한 비트씩 오른쪽으로 이동할 때마다 그 값은 2배씩 감소한다는 사실을 알 수 있다.
unsigned right shift 연산
- 부호 비트까지 포함하여 모든 비트를 전부 오른쪽으로 이동시킨다.
- 새로 생기는 왼쪽 비트들은 언제나 0으로 채워진다.
관계 연산자
- 피연산자 사이의 상대적인 크기를 판단하는 연산자입니다.
- 왼쪽의 피연산자와 오른쪽의 피연산자를 비교하여, 어느 쪽이 더 큰지, 작은지, 또는 서로 같은지를 판단합니다.
- 모두 두 개 의 피연산자를 가지는 이항 연산자이며, 피연산자들의 결합 방향은 왼쪽에서 오른쪽입니다.
관계 연산자 설명 == 왼쪽의 피연산자와 오른쪽의 피연산자가 같으면 참을 반환함 != 왼쪽의 피연산자와 오른쪽의 피연산자가 같지 않으면 참을 반환함 > 왼쪽의 피연산자가 오른쪽의 피연산자보다 크면 참을 반환함 >= 왼쪽의 피연산자가 오른쪽의 피연산자보다 크거나 같으면 참을 반환함 < 왼쪽의 피연산자가 오른쪽의 피연산자보다 작으면 참을 반환함 <= 왼쪽의 피연산자가 오른쪽의 피연산자보다 작거나 같으면 참을 반환함 논리 연산자
- 주어진 논리식을 판단하여, 참(true) 과 거짓(false)을 결정하는 연산자입니다.
- AND 연산과 OR 연산은 두 개의 피연산자를 가지는 이항 연산자이며, 피연산자들의 결합 방향은 왼쪽에서 오른쪽입니다.
- NOT 연산자는 피연산자가 단 하나뿐인 단항 연산자이며, 피연산자의 결합 방향은 오른쪽에서 왼쪽입니다.
논리 연산자 설명 && 논리식이 모두 참이면 참을 반환한다. (논리 AND 연산) || 논리식 중에서 하나라도 참이면 참을 반환함 (논리 OR 연산) ! 논리식의 결과가 참이면 거짓을, 거짓이면 참을 반환함 (논리 NOT 연산) A 와 B의 논리 연산 결과
A B A && B A || B !A true true true true false true false false true false false true false true true false false false false true instanceof
- instanceof 연산자는 참조 변수가 참조하고 있는 인스턴스의 실제 타입을 반환해 준다.
- 해당 객체가 어떤 클래스나 인터페이스로부터 생성되었는지를 판별해 주는 역할을 한다.
- 연산 결과로 true 또는 false를 반환한다.
- 기본 문법 :
(object) instanceof (type)
- type casting 전에 주로 사용하여 런타임시 ClassCastException 이 발생하는 것을 방지 할 수 있다.
실행
- 인스턴스 타입
public class Student extends Person { }
public static void main(String[] args) { Student student = new Student(); System.out.println(student instanceof Student); // true }
- 자식 클래스 타입
Person 클래스를 상속 받은 Student
public static void main(String[] args) { Student student = new Student(); System.out.println(student instanceof Person); // true }
- 인터페이스 구현 인스턴스
Work 인터페이스를 구현한 Student 클래스
public class Student extends Person implements Work { }
public static void main(String[] args) { Student student = new Student(); System.out.println(student instanceof Work); // true }
- Object 클래스자바에 모든 클래스는 Object 클래스를 상속 받기 때문에 instanceof 연산자를 사용했을 때 항상 true가 나온다.
public static void main(String[] args) { Student student = new Student(); System.out.println(student instanceof Object); // true }
- null 객체null 객체 인 경우 instanceof 를 사용하면 항상 false 를 반환한다.
public static void main(String[] args) { Student student = new Student(); student = null; System.out.println(student instanceof Student); //false }
대입 연산자
- 대입 연산자는 변수에 갑을 대입할 때 사용하는 이항 연산자이며, 피연산자들의 결합 방향은 오른쪽에서 왼쪽이다.
- 자바에서는 대입 연산자와 다른 연산자를 결합하여 만든 다양한 복합 대입 연산자를 제공한다.
대입 연산자 설명 = 왼쪽의 피연산자에 오른쪽의 피연산자를 대입함. += 왼쪽의 피연산자에 오른쪽의 피연산자를 더한 후, 그 결괏값을 왼쪽의 피연산자에 대입함. -= 왼쪽의 피연산자에서 오른쪽의 피연산자를 뺀 후, 그 결괏값을 왼쪽의 피연산자에 대입함. *= 왼쪽의 피연산자에 오른쪽의 피연산자를 곱한 후, 그 결괏값을 왼쪽의 피연산자에 대입함. /= 왼쪽의 피연산자를 오른쪽의 피연산자로 나눈 후, 그 결괏값을 왼쪽의 피연산자에 대입함. %= 왼쪽의 피연산자를 오른쪽의 피연산자로 나눈 후, 그 나머지를 왼쪽의 피연산자에 대입함. &= 왼쪽의 피연산자를 오른쪽의 피연산자와 비트 AND 연산한 후, 그 결괏값을 왼쪽의 피연산자에 대입함. |= 왼쪽의 피연산자를 오른쪽의 피연산자와 비트 OR 연산한 후, 그 결괏값을 왼쪽의 피연산자에 대입함. ^= 왼쪽의 피연산자를 오른쪽의 피연산자와 비트 XOR 연산한 후, 그 결괏값을 왼쪽의 피연산자에 대입함. <<= 왼쪽의 피연산자를 오른쪽의 피연산자만큼 왼쪽 시프트한 후, 그 결괏값을 왼쪽의 피연산자에 대입함. >>= 왼쪽의 피연산자를 오른쪽의 피연산자만큼 부호를 유지하며 오른쪽 시프트한 후, 그 결괏값을 왼쪽의 피연산자에 대입함. >>>= 왼쪽의 피연산자를 오른쪽의 피연산자만큼 부호에 상관없이 오른쪽 시프트한 후, 그 결괏값을 왼쪽의 피연산자에 대입함. 연산자 우선 순위
- 하나의 식에 연산자가 둘 이상 있을 때, 어떤 연산을 먼저 수행할지를 자동 결정하는 것
REFERENCE
http://tcpschool.com/java/java_operator_bitwise
https://www.geeksforgeeks.org/bitwise-operators-in-java/
자바의 정석'Java' 카테고리의 다른 글
[Java Study] - Garbage Collection(GC) in JVM (0) 2021.09.26 [Java Study] - LinkedList , Queue in Collection framework (0) 2021.09.26 [Java Study] - 자바 데이터 타입, 변수 ,배열 (0) 2021.09.22 [Java Study] - JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. (2) 2021.09.16 [Java] 문자열 앞뒤 공백 잘라내기- trim() (0) 2021.05.14