Unicorns

All the things

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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/
    자바의 정석

    댓글

Designed by Tistory.