Language/JAVA

연산자 (1)

hshDev 2021. 7. 11. 00:07

연산자 (Operator)

연산자와 피연산자

연산자(Operator): 연산을 수행하는 기호 (+, -, *, /, 등)

피연산자(Operand): 연산자의 작업 대상 (변수, 상수, 리터럴, 수식)

식과 대입연산자

식(Expression): 연산자와 피연산자를 조합하여 계산하고자 하는 것을 표현한 것

평가(Evaluation): 식을 계산하여 결과를 얻는 것. 하나의 식을 평가하면, 하나의 결과를 얻는다.

대입 연산자(=): 식의 평가결과를 변수와 같이 값을 저장 할 수 있는 공간에 결과를 저장할때 사용.

연산자의 종류

종류 연산자 설명
산술 연산자 +, -, *, /, %, <<, >> 사칙연산과 나머지(%) 연산. bit shift 연산.
비교 연산자 >, <, >=, <=, ==, != 크고 작음과 같고 다름을 비교.
논리 연산자 &&, ||, !, &, |, ^, ~ AND와 OR으로 조건을 연결.
'|'은 OR연산자, '&'은 AND연산자, '^'은 XOR연산자, '~'은 NOT연산자
대입 연산자 = 우변의 값을 좌변에 저장.
기 타 (type), ? :, instanceof 형변환 연산자, 삼항연산자, instanceof 연산자
  • 삼항 연산자는 오직 '? :' 뿐이다.

연산자의 우선순위와 결합규칙

종류 결합규칙 연산자 우선순위
단항 연산자 ++, --, +, -, ~, !, (type) 높음
산술 연산자 *, /, %
+, -
<<, >>, >>>
비교 연산자 <, >, <=, >=, instanceof
==, !=
논리 연산자 &
^
|
&&
||
삼항 연산자 ? :
대입 연산자 =, +=, -=, *=, /=, %=
<<=, >>=, &=, ^=, |=
낮음

Shift 연산자 (<< , >> , >>>)

  • 정수형데이터에서만 사용가능하고 2진수로 표현했을때 각 자리를 오른쪽 또는 왼쪽으로 이동
  • 오른쪽으로 n비트 이동하면 피연산자를 2의 n승으로 나눈 것과 같은 결과이다.
  • '<<' 연산자의 경우, 피연산자의 부호에 상관없이 자리를 왼쪽으로 이동시킵니다.
  • '>>' 연산자는 음수인 경우 부호를 유지시켜주기 위해서 빈자리를 1로 채웁니다.
  • '>>>' 연산자는 부호에 상관없이 항상 0으로 빈자리를 채워줍니다.

산술 변환 (usual arithmetic conversion)

피연산자의 타입이 다르다면, 연산 전 형변환 연산자로 타입을 일치시켜야 한다.

자동 형변환 규칙이 적용되는 타입인 경우, 보통 작은 타입에서 큰 타입으로 자동 형변환이 수행된다.

연산 전 피연산자 타입의 일치를 위해 자동 형변환되는것을 '산술 변환' 또는 '일반 산술 변환'이라 한다.

  • 두 피연산자의 타입을 같게 일치시킨다. (보다 큰 타입으로 일치)
  • 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다. (ex. char + short → int + int → int) 이유는 int형이 JVM에서 효율적으로 처리할 수 있는 단위이기도 하며 오버플로우의 발생 확률을 줄이기 위해서.

실수형이 아닌 피연산자의 연산결과는 정수형이 되어 소숫점 이하의 결과가 버려진다. 따라서 실수 결과를 얻기 위해서는 피연산자 중 한쪽을 실수형인 float 혹은 double로 형변환 해야 한다.

728x90
반응형