본문 바로가기
JAVA/정리

[JAVA] 연산자

by oda 2022. 12. 6.

연산자

- 사용하는 목적에 따라 산술 연산자, 단항 연산자, 비교 연산자, 논리 연산자, 쉬프트 연산자, 기타 연산자로 구분한다.


산술 연산자 (+, -, *, /, %)

  • 사칙연산 및 나머지 연산
  • 피연산자가 정수타입(byte, short, char, int)이면 연산의 결과는 int 타입이다.
  • 피연산자가 정수타입이고 그 중 하나가 long 타입이면 연산의 결과는 long 타입이다.
  • 피연산자 중 하나가 실수 타입이면 연산의 결과는 실수 타입이다.

 

단항 연산자 (+, -,!, ++, --)

  • 항이 하나인 연산자
  • +, -  : 부호 연산자
  • ! : 논리 부정 연산자
  • ++, -- : 증감 연산자

 

비교연산자(==, <, >, <=, >=,!=)

  • 양 변을 비교하는 연산
  • 참 또는 거짓으로 값을 반환한다.
  • 반복문이나, 조건문과 같은 제어문에 사용된다.
  • 문자열을 비교할 땐 equals() 함수를 사용하여 비교될문자열.equlas(비교할문자열) 형식으로 적으며 이때 영문자일 경우 대소문자를 구분하여 비교한다.

 

논리 연산자(&&, || , !, ^)

  • 여러 가지 조건을 동시에 검사할 때 사용하는 연산자
  • 두 항의 값이 boolean값일 경우 사용하는 연산자
AND a&&b 두 값이 모두 참이면 참
두 값 중 하나라도 거짓이면 거짓
OR a||b 두 값 중 하나라도 참이면 참
두 값 모두 거짓이면 거짓
NOT !a 현재 값의 반대인 값을 반환
참이었으면 거짓, 거짓이었으면 참
XOR a^b 두 값이 서로 다를 경우 참
두 값이 서로 같을 경우 거짓

 

비트 논리 연산자(&, |, ^, ~)

  • 비트(bit) 단위로 논리 연산을 수행
  • 0과 1이 피연산자
  • 2진수로 표현했을 때 규칙에 따라 알맞은 결과 반환
  • byte, short, int, long만 피연산자가 될 수 있고, float, double은 피연산자가 될수 없다.

비트 이동 연산자(<<, >>, >>>)

  • 비트(bit)를 좌측 또는 우측으로 밀어서 이동시키는 연산을 수행한다.
  • a << b : 정수 a의 각비트를 b만큼 왼쪽으로 이동, 오른쪽 빈자리는 0으로 채움,  a*2^b와 동일한 결과 출력
  • a >> b : 정수 a의 각 비트를 b만큼 오른쪽으로 이동, 왼쪽 빈자리는 최상위 부호 비트와 같은 값으로 채움, 
                  a/2^b와 동일한 결과 출력
  • a >>> b : 정수 a의 각 비트를 b만틈 오른쪽으로 이동, 왼쪽 빈자리는 0으로 채움 
public static void main(String[] args) {
     int a = 15; //1111
     int b = 5;  //0101 
     //비트 논리 연산
     System.out.println(a|b); // 1111 | 0101 => 1111 (15)
     System.out.println(a&b); // 1111 & 0101 => 0101 (5)
     System.out.println(a^b); // 1111 ^ 0101 => 1010 (10)      //배타적 논리합(XOR)
     System.out.println(~b);  // ~ 0000 0101 => 1111 1010 (-6) //보수(NOT)
     //비트 이동 연산
     System.out.println(a>>2); // 1111 >> 2 => 0011 (3)
     System.out.println(b<<4); // 0101 << 4 => 0101 0000 (80)
     System.out.println(b>>>2); // 0101 >>> 2 => 0001 (1)
 }

 

삼항 연산자 ( 조건?참:거짓 )

  • 항이 3개인 연산자
  • 조건식의 참/거짓 여부에 따라서 각각 다른 결과 반환
  • 조건은 boolean변수 또는 참/거짓을 반환하는 조건식이 들어간다.
  • ? 뒤에는 조건이 참일경우의 값이, :뒤에는 조건이 거짓일 경우의 값이 들어간다.

 

대입연산자 (=, +=, -=, *=, /=, %= 등)

  • 값을 할당하는데 쓰이는 연산자
  • 자주 사용하는 연산을 간결하게 코딩할 수 있도록 만들어진 연산자
  • 산술연산자와 함께 있다면 산술연산을 실행 한 후 대입을 한다.

 


오버플로우 / 언더 플로우

- 오버 플로우 (overflow) : 타입이 허용하는 최대 값을 벗어나는 것

- 언더 플로우 (underflow) : 타입이 허용하는 최솟값을 벗어나는 것

- 정수타입 연산에서 오버플로우 또는 언더플로우가 발생되면 해당 정수타입의 최소값 또는 최대값으로 되돌아간다.

정수 타입의 오버플로우 / 언더플로우

 

산술연산에서 정수, 실수

- 산술 연산을 정확하게 계산하고 싶다면 실수 타입을 사용하지 않는것이 좋다. 

- 실수 연산을 해야한다면 정수연산으로 변경하여 계산하는 것이 좋다.

 

 

연산자 우선순위

- 산술 연산자에서 덧셈(+), 뺄셈(-) 연산자보단 곱셈(*), 나눗셈(/) 연산자가 운선순위가 높다(먼저 계산된다)

- 논리 연산자에서 && 가 || 보다 선순위가 높다.

- 우선순위가 같은 연산자의 경우 대부분 왼쪽에서부터 오른쪽으로 연산을 수행한다.

연산자 우선순위

 

 

'JAVA > 정리' 카테고리의 다른 글

[JAVA] 모니터에 변수 값 출력  (0) 2023.01.05
[JAVA] 타입 변환  (0) 2022.12.06

댓글