연산자

kwang·2022년 6월 29일
0

Java-Live-Study

목록 보기
4/15

목표

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

학습할 것

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

산술 연산자

산술 연산자는 사칙연산을 다루는 연산자로 두개의 피연산자를 가지는 이항 연산자를 말합니다.

산술 연산자의 종류

연산연산자수식결과
덧셈+A + BA와 B를 더한 값
뺄셈-A - BA와 B를 뺀 값
곱셈*A * BA와 B를 곱한 값
나눗셈/A / BA와 B를 나눈 몫
나머지%A % BA와 B를 나눈 나머지

다른 타입의 자료형간의 덧셈의 경우

피연산자중 더 큰 자료형으로 자동형 변환이 되어 연산결과가 리턴된다.
또는 원하는 자료형으로 형변환해주면 된다.

int int1 = 5;
int int2 = 2;
double double1 = 2.0;
double double2;

double2 = int1 + double1;
double2 = (double) (int1 / int2);

비트 연산자

비트 연산자는 데이터를 비트 단위로 연산한다. 그래서 0또는 1로 표현이 가능한

정수 타입이나 정수형 캐스팅이 가능한 자료형만 비트 연산이 가능하다.

비트 이동 연산자

연산식설명
x << y정수 x의 각 비트를 y만큼 왼쪽으로 이동시키고 0으로 채워넣는다
x >> y정수 x의 각 비트를 y만큼 오른쪽으로 이동시키고 정수 a의 최상위 부호비트로 채워넣는다
x >>> y정수 x의 각 비트를 y만큼 왼쪽으로 이동시키고 0으로 채워넣는다

2 << 3
2는 2진수로 표현하면 10이다. 그리고 << 3은 3자리를 왼쪽으로 밀어넣으면 10000이 되는데 이를 10진수로 표현하면 16이 된다.

16 >> 3
위의 예제와 반대의 경우로 2진수 10000를 3자리를 오른쪽으로 밀어넣으면 10이 되고 10진수로 2다.

-16 >> 3
비트 연산자는 총 32비트로 이루어지는데 위의 예제는 양수여서 차이가 없지만 -의 경우 최상의 부호비트의 값이 1이 된다. 그래서 >>의 경우 오른쪽의 있는 값만큼이동하고 빈자리를 최상위 부호비트로 채우기 때문에 아래 이미지처럼 된다.

-16 >>> 3
연산>>>의 원리는 >>와 같지만 최상위비트가 0으로 채워진다. 그렇기에 결과 값은 양수로 변한다.

System.out.println("2 << 3 = " + (2<<3)); 
System.out.println("16 >> 3 = " + (16>>3));
System.out.println("-16 >> 3 = " + (-16>>3));
System.out.println("-16 >>> 3 = " + (-16>>>3));

비트 논리 연산자

연산식논리설명
&AND두 비트가 1일 경우 결과가 1
|OR두 비트 중 하나라도 1일 경우 결과가 1
^XOR두 비트가 값이 다를 경우 결과가 1
~NOT비트 반전

관계 연산자

비교 연산자라고도 하며 부등호를 이용하는 연산자이다. 리턴 값으로는 false 또는 true를 반환한다.

연산자수식설명
>1 > 2왼쪽 항이 크면 참을 아니면 거짓을 반환한다.
<1 < 2오른쪽 항이 크면 참을 아니면 거짓을 반환한다.
>=1 >= 2왼쪽 항이 크거나 같으면 참을 아니면 거짓을 반환한다.
<=1 <= 2오른쪽 항이 크거나 같으면 참을 아니면 거짓을 반환한다.
==1 == 2두 값이 같으면 참을 아니면 거짓을 반환한다.
!=1 != 2두 값이 같지 않으면 참을 아니면 거짓을 반환한다.

논리 연산자

논리 연산자는 AND, OR, NOT 세 가지가 있으며 결과로 true, false를 반환한다.

연산자수식설명
&&1 < 2 && 1 == 1두 항이 모두 참일 경우에만 참을 반환한다.
||1 > 2 || 1 == 1두 항중 하나라도 참일 경우에 참을 반환한다.
!!(1 < 2)단항 연산자로 대상의 논리를 부정한다.

instanceof

instanceof는 객체의 타입을 확인하는 연산자이다.

타입이 같다면 true를 반환하며 상속관계에서 자동형변환이 가능하다면 true를 반환한다.

instanceof는 인스턴스 instanceof 클래스 와 같은 형태로 사용한다.

class Parent{}
class Child extends Parent{}

public class InstanceofTest {

    public static void main(String[] args){

        Parent parent = new Parent();
        Child child = new Child();

        System.out.println( parent instanceof Parent );  // true
        System.out.println( child instanceof Child );   // true 
        System.out.println( parent instanceof Child );   // false
        System.out.println( child instanceof Parent );   // true
        
    }
}

3번째의 경우 부모클래스는 자식클래스로 강제 형변환을 해야하는 경우라 false를 반환하지만 4번의 경우에는 자동형반환이 가능하기에 true를 반환한다.

assignment(=) operator

대입연산자를 말하며 변수에 값을 대입할 때 사용하는 이항 연산자를 말한다.

피연산자들의 결합 방향은 오른쪽에서 왼쪽이다.

연산자 ()설명
=왼쪽의 피연산자에 오른쪽 피연산자를 대입
+=왼쪽 피연산자의 오른쪽 피연산자를 더한 후 오른쪽 피연산자의 대입
-=왼쪽 피연산자의 오른쪽 피연산자를 뺀 후 오른쪽 피연산자의 대입
*=왼쪽 피연산자의 오른쪽 피연산자를 곱한 후 오른쪽 피연산자의 대입
/=왼쪽 피연산자의 오른쪽 피연산자를 나눈 몫을 오른쪽 피연산자의 대입
%=왼쪽 피연산자의 오른쪽 피연산자를 나눈 나머지 값을 오른쪽 피연산자의 대입
&=왼쪽의 피연산자를 오른쪽의 피연산자와 비트 AND 연산한 후 그 결과값을 왼쪽의 피연산자에 대입
|=왼쪽의 피연산자를 오른쪽의 피연산자와 비트 OR 연산한 후 그 결과값을 왼쪽의 피연산자에 대입
^=왼쪽의 피연산자를 오른쪽의 피연산자와 비트 XOR 연산한 후 그 결과값을 왼쪽의 피연산자에 대입
<<=왼쪽의 피연산자를 오른쪽의 피연산자만큼 왼쪽 시프트한 후 그 결괏값을 왼쪽의 피연산자에 대입
>>=왼쪽의 피연산자를 오른쪽의 피연산자만큼 부호를 유지하며 오른쪽 시프트한 후 그 결과값을 왼쪽의 피연산자에 대입
>>>=왼쪽의 피연산자를 오른쪽의 피연산자만큼 부호에 상관없이 오른쪽 시프트한 후 그 결과값을 왼쪽의 피연산자에 대입

화살표(->) 연산자

화살표 연산자는 Java8에서 추가된 람다식을 다루는 연산자이다.

람다식은 메서드를 하나의 '식'으로 표현한 것이다. 그래서 메서드명과 반환값을 제거하고 매개변수 선언부와 몸통{}으로만 표현한다.
(매개변수) -> {실행문;}처럼 사용한다.

이와 관련해서는 추후 람다식 학습시에 자세히 알아보자

3항 연산자

if문과 같이 조건문처럼 사용하는데 간단한 조건문의 경우 3항 연산자를 사용하여 해결할 수 있다

조건식 ? 참일때 : 거짓일때; 처럼 사용할 수 있다.

String s = 2 > 1 ? "참": "거짓"; // s = "참"

연산자 우선 순위

0개의 댓글