• 두 개의 리터럴, 변수를 비교할 때 사용, 연산결과는 true or false

  • 비교하는 피연산자의 자료형이 다를 경우 범위가 큰 쪽으로 형변환하여 자료형을 일치시킨 후 비교

  • 대소비교 연산자 - <, >, <=, >=

    • boolean을 제외한 기본형 변수에 사용 가능, 참조형에는 사용 불가

  • 등가비교 연산자 - ==, !=

    • 저장되어 있는 값이 같은지 다른지 비교함

    • 모든 자료형에 사용 가능(기본형, 참조형)

      • 기본형 : 저장되어 있는 값이 같은지

      • 참조형 : 가리키고 있는 주소가 같은지(같은 객체를 가리키는지)

      • 참조형 변수에 사용할 수 있는 연산자는 ==, !=, (타입), +

      • +는 문자열 결합 때만 허용, 문자열 비교는 == 대신 equal() 사용

    • 기본형과 참조형은 형변환이 불가능하므로 기본형-참조형 함께 사용 불가능

    • 실수형인 float와 double은 근사값으로 저장됨

      • float f = 0.1f, double d = (double)f 일 때 d ≠ f

      • f = 0.1, d = 0.10000000149011612 이므로 다름


  • 이항 연산자의 한 종류

  • 이항 연산자는 피연산자의 크기가 4byte이하면 4byte(int)로 변환 후에 연산 수행

  • 이항 연산자는 피연산자들의 타입을 서로 일치시켜야 함

  • 사칙 연산자 - +, -, *, /

    • int보다 작은 자료형은 int로 형변환 후에 연산 수행

    • 자료형이 다르면 표현범위가 더 큰 쪽에 맞춰 형변환 후에 연산 수행

    • 정수형 간의 나눗셈에서 0으로 나누는 것은 금지

    • 실수형은 부동소수점 값인 0.0f, 0.0d로 나누는 것이 가능하나 결과는 NaN(숫자 아님)으로 뜸

  • 자료형 변환의 예

    • byte + byte → int + int → int

    • byte + short → int + int → int

    • char + char → int + int → int


    • float + int → float + float → float

    • long + float → float + float → float

    • float + double → double + double → double

    • 사칙 연산자의 연산결과를 대입할 경우 int보다 작은 자료형에 대입할 시 에러가 발생 - 형변환 해줘야 함

    • 변수의 자료형에 따라 발생하는 오버플로때문에 원래의 결과값과는 다를 수 있음

    • 연산결과를 넣는 변수의 자료형과는 별개로 피연산자들의 결과값이 오버플로될 경우 오버플로된 값이 변수에 들어감

      • 변수의 자료형이 long일지라도 두 개의 피연산자가 int면 결과값은 int기 때문에 오버플로가 발생하여 이상한 값이 변수에 들어갈 수도 있음

      • 하나의 피연산자가 long이라면 결과값도 long이 되므로 오버플로 X

    • 오버플로 시 연산순서에 따라서도 값이 달라짐

    • 상수 or 리터럴 간의 연산은 실행과정동안 변하는 값이 아니기 때문에 형변환이 없어도 실행 가능

      • char c2 = ‘a’ + 1; //문제 없음

      • char c2 = c1 + 1; //문제 있음

    • 대문자와 소문자의 코드 차이는 32

      • ‘a’ - ‘A’ = 32

    • 숫자 0과 문자 0의 값은 차이가 있음

    • Math.round() : 매개변수로 받은 값을 소수점 첫째 자리에서 반올림하여 정수로 돌려줌

  • 나머지 연산자 - %

    • 나누고 난 나머지 값을 돌려줌

    • boolean을 제외한 기본형 변수에 사용 가능

    • 정수형인 연산에는 오른쪽에 0을 사용할 수 없고, 0.0d, 0.0f로 나누는 것은 허용

    • 결과값의 부호는 왼쪽에 있는 피연산자의 부호를 따름 - 부호를 무시한 나머지 연산 후, 결과에 부호를 붙임

  • 쉬프트 연산자 - <<, >>, >>>

    • 피연산자의 각 자리를 오른쪽 or 왼쪽으로 이동(2진수로 표현했을 때)

    • 정수형 변수에만 사용 가능

    • x << n : x * 2^n과 같음

    • x >> n : x / 2^n과 같음

    • n의 크기가 자료형의 bit보다 크면 n % bit 만큼만 이동시킴

    • << : 자리를 왼쪽으로 이동시키며 빈칸을 0으로 채움

    • >> : 자리를 오른쪽으로 이동시키는데 양수와 음수일 때 차이가 있음

      • 양수 : 빈칸을 0으로 채움

      • 음수 : 부호를 위해 빈칸을 1로 채움

    • >>> : 자리를 오른쪽으로 이동시키며 양수, 음수 관계없이 빈칸을 0으로 채움

    • 쉬프트 연산자가 사칙 연산자(*, /)보다 속도가 빠름

    • Integer.toBinaryString() : 매개변수를 2진수로 표현한 문자열 반환, 맨 앞의 0부분을 생략함

      • -8 >>> 1 = 1111111111111111111111111111100


  • 증감 연산자 - ++, --

    • 증가 연산자(++) : 피연산자의 값을 1 증가

    • 감소 연산자(--) : 피연산자의 값을 1 감소

    • 전위형 : 왼쪽에 사용, 변수의 값을 증가시킨 뒤 연산

    • 후위형 : 오른쪽에 사용, 연산한 후에 변수의 값 증가

    • boolean을 제외한 기본형 변수에 사용 가능

    • 다른 수식에 포함되거나 함수의 매개변수로 사용된 경우(단독사용) 전위형과 후위형의 결과가 달라짐

    • 증감 연산자가 사칙 연산자(+, -)보다 더 적은 명령으로 작업을 수행하므로 빠름

    • 사칙 연산자(+, -)는 필요에 따라 피연산자를 형변환하지만 증감 연산자는 형변환없이 피연산자 값을 변경

  • 부호 연산자 - +, -

    • 피연산자의 부호를 변경

    • boolean, char을 제외한 기본형 변수에 사용 가능

  • 비트전환 연산자 - ~

    • 피연산자를 2진수로 표현 시, 0은 1로, 1은 0으로 바꿈

    • 정수형과 char에만 사용 가능

    • 피연산자의 부호가 반대로 바뀜

    • int보다 작은 자료형은 int로 변환 후에 전환

    • ~의 연산결과를 담기 위해서는 int를 사용하거나 형변환해야 함

    • 어떤 양의 정수에 대한 음의 정수를 얻기 위해서는 ~정수+1 하면 됨(2의 보수?)

  • 논리부정 연산자 - !

    • true를 false로, false를 true로 변경

    • boolean에만 사용 가능


'JAVA' 카테고리의 다른 글

[Java의 정석] 3.4. 비교 연산자  (0) 2016.03.01
[Java의 정석] 3.3. 산술 연산자  (0) 2016.03.01
[Java의 정석] 3.1. 연산자 (operator)  (0) 2016.03.01
[Java의 정석] 2.2. 변수의 타입  (0) 2016.03.01
[Java의 정석] 2.1. 변수  (0) 2016.03.01

+ Recent posts