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/
자바의 정석