Java
[Java Study] - 연산자 , 연산자의 종류
connieya
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/
자바의 정석