2014년 6월 12일 목요일

[Java] 연산자

연산자

종류 및 우선순위

  1. 단항연산자
    • ++, --, +, -, ~, !
    • 연산 방향 : ←
  2. 산술연산자
    • *, /, %, +, -, <<, >>, >>>
    • 연산 방향 : →
  3. 비교연산자
    • <, >, <=, >=, instanceof, ==, !=
    • 연산 방향 : →
  4. 논리연산자
    • &, ^, |, &&, ||
    • 연산 방향 : →
  5. 삼항연산자
    • A?B:C
    • A는 조건부, 조건부가 참일 경우 B실행, 거짓일경우 C실행
  6. 대입연산자
    • =, +=, -=, %=, /=, <<=, >>=, >>>=, &=, ^=, |=
    • 연산 방향 : ←

모든 프로그래밍이 그렇듯이 조금씩 해보는 것이 암기보다 훨씬 좋다

단항연산자
  • 전위형 : 값이 참조되기 전에 연산한다.
  • 후위형 : 값이 참조된 후에 연산한다.

//전위형
int a = 1;
int b = ++a;
//대입 연산을 하기 전에 증가하기 때문에 a 값에는 2,b 값에도 2가 저장된다.

//후위형
int a = 1;
int b = a++;
//대입 연산을 한 후에 증가시키기 때문에 a 값에는 2,b 값에는 1이 저장된다.


산술연산자

  • 모든 이항 연산자는 연산을 수행하기 전에 크기가 4byte 이하인, 즉 byte, char, short, boolean의 자료형을 int으로 변환하여 연산한다.
  • 피연산자들의 타입을 서로 일치시킨다. 여기서 피연산자 중에서 자료형의 범위가 더 큰 자료형으로 맞춰서 형변환이 된후 연산을 수행한다.
    • float+int → float+(float)int
    • double+byte → double+(double)byte
  • 0으로 나누는 것은 불가, 0.0f 또는 0.0d로 나누는 것은 오류발생은 일어나지 않지만 infinity 또는 NaN(Not a Number)의 결과가 나온다.
    • 0으로 나누면 java.lang.ArithmeticException 이와 같은 오류 발생

쉬프트 연산자

>>, <<, >>> 가 있다.

>>

  • 값을 2진수로 표현하였을 경우 값들을 오른쪽으로 한 단위씩 이동시킨다. 
  • 첫 자리 단위의 보호를 위하여 이전의 값이 0이라면(양수라면) 0으로 채우게되고
  • 1이라면(음수라면) 1로 채우게된다.
  • x>>n 은 x의 2진값을 오른쪽으로 n개만큼 이동시킨다. 이 때 값은 x/ 2^n의 결과와 같다.

<<
  • 값을 2진수로 표현하였을 경우 값들을 왼쪽으로 한 단위씩 이동시킨다. 
  • 맨 오른쪽의 자리는 0으로 채우게 된다.
  • x<<n 은 x의 2진값을 왼쪽으로 n개만큼 이동시킨다. 이 때 값은 x* 2^n의 결과와 같다.
>>>

  • 기본적으로 >> 와 같지만 첫자리의 수가 무조건 0으로 채워진다.

    댓글 없음:

    댓글 쓰기