ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] 3주차 과제 : 자바가 제공하는 다양한 연산자
    Java/온라인 자바 스터디 2020. 11. 29. 15:04
    반응형

    목표

    자바가 제공하는 다양한 연산자 학습하기

     

    학습할 것

     - 산술 연산자

     - 비트 연산자

     - 관계 연산자

     - 논리 연산자

     - instanceof

     - assignment(=) operator

     - - 화살표(->) 연산자

     - 3항 연산자

     - 연산자 우선 순위

     - (optional) Java 13. switch 연산자

     

    산술 연산자

    산술 연산자인 사칙 연산자(+, -, *, /), 나머지 연산자(%), 쉬프트 연산자(<<, >>, >>>)는 모두 두개의 피연산자 취하는 이항 연산자이다. 이항 연산자는 피연산자의 크기가 4byte보다 작으면 4byte(int)로 변환한 다음에 연산을 수행한다. 또한 연산을 수행하기 전에 피연산자들의 타입을 일치시킨다.

     

    사칙 연산자(+, -, *, /)

    1. int(4byte)보다 크기가 작은 자료형은 int형으로 형변환 후에 연산을 수행한다.

    byte + short -> int + int -> int

    2.두 개의 피연산자 중 자료형의 표현범위가 큰 쪽에 맞춰서 형변환 된 후 연산을 수행한다.

    int + float -> float + float -> float

    3. 정수형 간의 나눗셈에서 0으로 나누는 것은 금지되어 있다.

     

    나머지 연산자(%)

    왼쪽의 피연산자를 오른쪽 피연산자로 나누고 난 나머지 값을 돌려주는 연산자이다. boolean형을 제외하고는 모든 기본형 변수에 사용할 수 있다. 나머지 연산자는 주로 짝수, 홀수 또는 배수 검사 등에 주로 사용된다.

    나눗셈에서와 같이 피연산자가 정수형인 연산에서는 나누는 수(오른쪽 피연산자) 0을 사용할 수 없고, 나머지 연산자 역시 0.0이나 0.0f로 나누는 것은 허용된다.

     

    쉬프트 연산자(<<, >>, >>>)

    쉬프트 연산자는 정수형 변수에만 사용할 수 있는데, 피연산자의 각 자리(2진수로 표현했을 때)를 오른쪽 또는 왼쪽으로 이동(shift)한다고 해서 쉬프트 연산자(shift operator)라고 이름 붙여졌다. 오른쪽으로 n자리를 이동하면 피연산자를 2n로 나눈 것과 같은 결과를, 왼쪽으로 n자리로 이동하면 2n으로 곱한 것과 같은 결과를 얻을 수 있다.

    x << nx * 2n의 결과와 같다.

    x >> nx / 2n의 결과와 같다.

     

    비트 연산자

    비트 연산자는 이진 비트연산을 수행한다. 값을 이진수로 표현했을 때의 각 자리수를 다음 규칙에 따라 연산을 수행한다. 실수형인 float double을 제외한 모든 기본형에 사용가능하다.

    | (OR연산자) - 피연산자 중 한쪽의 값이 1이면, 1을 결과로 얻는다. 그 외에는 0을 얻는다.

    & (AND연산자) - 피연산자 양 쪽이 모두 1이어야 1을 결과로 얻는다. 그 외에는 0을 얻는다.

    ^ (XOR연산자) - 피연산자의 값이 서로 다를 때만 1을 결과로 얻는다. 같을 때는 0을 얻는다.

    비트 연산자의 2진 연산결과

    x

    y

    x | y

    x & y

    x ^ y

    1

    1

    1

    1

    0

    1

    0

    1

    0

    1

    0

    1

    1

    0

    1

    0

    0

    0

    0

    0

     

    관계 연산자

    관계 연산자는 두 개의 변수 또는 리터럴을 비교하는 데 사용되는 연산자로, 주로 조건문과 반복문의 조건식에 사용되며, 연산결과는 true 또는 false이다.

    관계 연산자 역시 이항 연산자이므로 비교하는 피연산자의 자료형이 서로 다른 경우에는 자료형의 범위가 큰 쪽으로 형변환하여 피연산자의 타입을 일치시킨 후에 비교한다.

     

    대소비교 연산자(<, >, <=, >=)

    두 피연산자의 크기를 비교하는 연산자이다. 기본형 중에서는 boolean형을 제외한 나머지 자료형에 다 사용할 수 있지만 참조형에는 사용할 수 없다.

     

    등가비교 연산자(==, !=)

    두 피연산자에 저장되어 있는 값이 같은지 또는 다른지를 비교하는 연산자이다. 대소비교 연산자(<, >, <=, >=)와는 달리, 기본형은 물로 참조형, 즉 모든 자료형에 사용할 수 있다. 기본형의 경우 변수에 저장되어 있는 값이 같은지를 알 수 있고, 참조형의 경우 객체의 주소값을 저장하기 때문에 두 개의 피연산자(참조변수)가 같은 객체를 가리키고 있는지를 알 수 있다.

    기본형과 참조형 간에는 서로 형변환이 가능하지 않기 때문에 등가 비교 연산자(==, !=)의 피연산자로 기본형과 참조형을 함께 사용할 수는 없다.

    비교 연산자의 연산결과

    수식

    연산결과

    x > y

    xy보다 클 때 true, 그 외에는 false

    x < y

    x y보다 작을 때 true, 그 외에는 false

    x >= y

    x y보다 크거나 같을 때 true, 그 외에는 false

    x <= y

    x y보다 작거나 같을 때 true, 그 외에는 false

    x == y

    x y가 같을 때 true, 그 외에는 false

    x != y

    x y가 다를 때 true, 그 외에는 false

     

    논리 연산자

    논리 연산자는 피연산자로 boolean형 또는 boolean형 값을 결과로 하는 조건식만을 허용한다. 조건문과 반복문에서 조건식 간의 결합에 사용된다.

    그리고, ‘&&’‘||’ 연산보다 우선순위가 높으므로 한 조건식에 ‘&&’‘||’가 함께 사용될 때는 괄호를 사용해서 우선순위를 명확히 해주는 것이 좋다.

    || (OR결합) - 피연산자 중 어느 한 쪽만 true이면 true를 결과로 얻는다.

    && (AND결합) - 피연산자 양쪽 모두 true이어야 true를 결과로 얻는다.

    논리 연산자의 연산결과

    x

    y

    x || y

    x && y

    true

    true

    true

    true

    true

    false

    true

    false

    false

    true

    ture

    false

    false

    false

    false

    false

     

    instanceof 연산자

    참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해 instanceof 연산자를 사용한다. 주로 조건문에 사용되며, instanceof의 왼쪽에는 참조변수를 오른쪽에는 타입(클래스명)이 피연산자로 위치한다. 그리고 연산의 결과로 boolean값인 true, false 중의 하나를 반환한다.

    instanceof를 이용한 연산결과로 true를 얻었다는 것은 참조변수가 검사한 타입으로 형변환이 가능하다는 것을 뜻한다. 값이 null인 참조변수에 대해 instanceof 연산을 수행하면 false를 결과로 얻는다.

     

    assignment(=) operator

    할당 연산자는 변수에 값 또는 수식의 연산결과를 저장하는데 사용된다. 할당 연산자의 왼쪽에는 반드시 변수가 위치해야하며, 오른쪽에는 리터럴이나 변수 또는 수식이 올 수 있다.

    변수 앞에 키워드 ‘final’을 붙이면 상수(constant)가 된다. 상수는 선언과 동시에 값을 저장해야하며 한 번 저장되 값은 바꿀 수 없다.

    대입 연산자는 모든 연산자들 중에서 가장 낮은 연산순위를 가지고 있기 때문에 제일 마지막에 수행된다. 그리고 연산진행방향이 오른쪽에서 왼쪽이기 때문에 x=y=3;에서 y=3이 먼저 수행되고 그 다음에 x=y가 수행된다는 것을 기억할 것이다.

    또한 대입 연산자는 다른 연산자와 결합하여 ‘op=’와 같은 방식으로 사용될 수 있다. 예를 들면, ‘i = i + 3’‘i += 3’과 같이 표현될 수 있다.

     

    화살표(->) 연산자

    람다식(Lambda Expression)은 함수(메서드)를 간단한 (Expression)’으로 표현하는 방법으로 이 때 화살표(->)를 이용하여 표현한다.

    (매개변수, ... ) -> {함수(메서드) ... }

     

    삼항 연산자(?:)

    삼항 연산자는 세 개의 피연산자를 필요로 하기 때문에 삼항 연사자로 이름 지어졌다. 조건식과 조건식이 참(true)일 때와 거짓(false)일 떄 반환되는 값, 이 세 가지가 삼항 연산자의 피연산자이다. 삼항 연산자의 조건식에는 연산결과가 true 또는 false인 식이 사용되어야 한다.

    조건식의 연산결과가 true이면 식1을 결과로 얻고 false이면 식2를 결과를 얻는다.

    (조건식) ? 1 : 2

    result = (x > 0) ? x : -x;

     

    연산자 우선 순위

    종류

    연산방향

    연산자

    우선순위

    단항 연산자

    ++, --, +, -, ~ , !

    높음

     

     

     

     

     

     

    낮음

    산술 연산자

    *, / , %

    +, -

    <<, >>, >>>

    관계 연산자

    <. >, <=, >=, instanceof

    ==, !=

    비트 연산자

    &

    ^

    |

    논리 연산자

    &&

    ||

    삼항 연산자

    ?:

    대입 연산자

    =, *=, /=, %=, +=, -=, <<=, >>=, >>>=, &=, ^=, !=

     

    1. 같은 줄에 있는 연산자들은 우선순위가 같으며, 우선순위가 같은 연산자들은 간에는 연산의 진행방향에 의해서 연산순서가 정해진다.

    2. 산술 > 비교 > 논리 > 대입, 대입은 제일 마지막에 수행된다.

    3. 단항(1) > 이항(2) > 삼항(3), 단항 연산자의 우선순위가 이항 연산자보다 높다.

     - 연산자의 연산을 하는데 필요로 하는 피연산자의 개수에 따라서 단항, 이항, 삼항 연산자라고 부른다, 덧셈 연산자(+)는 두 개의 피연산자를 필요로 하므로 이항 연산자이다.

    4. 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.

    출처 : 자바의 정석


    참조 : https://github.com/whiteship/live-study/issues/3

    반응형

    댓글

Designed by Tistory.