달덩이>< 2022. 8. 30. 20:25

연산이란?

  • 데이터를 처리하여 결과를 산출하는 것

연산자(Operator)

  • 연산에 사용되는 표시나 기호(+, -, *, /, %, =, ...)

피연산자(Operand) 

  • 연산 대상이 되는 데이터(리터럴, 변수)

연산식(Expressions)

  • 연산자와 피연산자를 이용하여 연산의 과정을 기술한 것
연산자 종류 연산자 피연산자수 산출값 타입 기능 설명
산술 +, -, *, /, % 이항 숫자 사칙연산 및
나머지 계산
부호 +, - 단항 숫자 음수와 양수의 부호
문자열 + 이항 문자열 두 문자열을 연결
대입 =, +=, -=, *=, /=, %=,
&=, ^=, |=, <<=, >>=, >>>=
이항 다양 우변의 값을 좌변의
변수에 대입
증감 ++, -- 단항 숫자 1만큼 증가/감소
비교 ==, !=, >, <, >=, <=,
instanceof
단항
이항
boolean 값을 비교
논리 !, &, |, &&, || 삼항 boolean 논리적 NOT, AND, OR 연산
조건 (조건식) ? A : B 삼항 다양 조건식에 따라 A 또는 B중 하나를 선택
비트 ~, &, |, ^ 단항
이항
숫자
boolean
비트 NOT, AND, OR, XOR 연산
쉬프트 >>, <<, >>> 이항 숫자 비트를 좌측/우측으로 밀어서 이동

 

연산의 방향과 우선순위

  • 연산자의 우선순위에 따라 연산된다.
  • 동일한 우선순위의 연산자는 연산의 방향 존재

연산의 방향과 우선순위

연산자 연산방향 우선순위
증감(++,--), 부호(+, -), 비트(~), 논리(!)
높음

낮음
산술(*, /, %)
산술(+, -)
쉬프트(<<, >>, >>>)
비교(<, >, <=, >=, instanceof)
비교(==, !=)
논리(&)
논리(^)
논리(|)
논리(&&)
논리(||)
조건(?:)
대입(=, +=, -=, *=, /=, %=, &=,^=, |=, <<=, >>=, >>>=)

 

단항 연산자란?

  • 피연산자가 1개인 연산자

단항 연산자의 종류

  • 부호 연산자: +, -
  • boolean 타입과 char 타입을 제외한 기본 타입에 사용 가능
  • 부호 연산자의 산출 타입은 int

증감 연산자 : ++, --

  • 변수의 값을 1 증가시키거나 (++) 1 감소(--) 시키는 연산자
  • 증감 연산자가 변수 뒤에 있으면 다른 연산자 먼저 처리 후 증감 연산자 처리

단항 연산자의 종류

  • 논리 부정 연산자 : !
  • 논리 부정 연산자는 피연산자가 true이면 false 값을 산출, 피연산자가 false이면 true 값을 산출
  • 비트 반전 연산자 : ~
  • 비트 반전 연산자는 byte, short, int, long 타입만 피연산자가 될 수 있다.
  • 비트값을 반전 (0 1 , 1 0) 시킨다.

이항 연산자란?

  • 피연산자가 2개인 연산자

이항 연산자의 종류

  • 산술 연산자: +, -, *, /, %
  • 문자열 연결 연산자: +
  • 대입 연산자: =, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>=
  • 비교 연산자: <, <=, >, >=, ==, !=
  • 논리 연산자: &&. ||, &, |, ^, !
  • 비트 논리 연산자: &, |, ^
  • 비트 이동 연산자: <<, >>, >>>

산술 연산자

  • boolean 타입을 제외한 모든 기본 타입에 사용 가능
  • 결과값 산출할 때 Overflow 주의
  • 정확한 계산은 정수를 사용
  • NaN(Not a Number)과 Inginity(무한대) 연산은 주의할 것  Ex) 5 % 0 -> NaN, 5/0 -> Infinity
연산식 설명
피연산자 + 피연산자 덧셈 연산
피연산자 - 피연산자 뺄셈 연산
피연산자 * 피연산자 곱셈 연산
피연산자 / 피연산자 좌측 피연산자를 우측 피연산자로 나눗셈 연산
피연산자 % 피연산자 좌측 피연산자르 우측 피연산자로 나눈 나머지를 구하는 연산

 

Ex) int result = num % 3; 이면 num을 3으로 나눈 나머지를 구한다는 뜻이다.

 

실수 10진수 값을 이진수 값으로 표기

  • 13 = 1101,  0.75 = 0.11,  0.1 = 0.001100110011001100.........
  • 십진수 0.1을 이진수로 변환한 결과가 무한 실수가 나와 컴퓨터에 저장할 때 오차 발생 (float보다 double이 좀 더 정밀하나 double도 오차 발생)
  • 0.1을 다른 값과 덧셈, 뺄셈, 곱하기, 나누기 등 연산할 때 오차 발생

문자열 연산자(산술연산 중 '+' 연산자 사용)

  • 피연산자 중 문자열이 있으면 문자열로 결합
String str1 = "JDK" + 6.0;
String str2 = str1 + "특징";

System.out.println(str2);

- Ex) 위에 코드처럼 코딩을 할 경우 결과값으로는 JDK6.0 특징이라고 결과값이 나온다.

 

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

  • 대소(<, <=, >, >=,) 또는 동등(==, !=) 비교해 boolean 타입인 true/false 산출
구분 연산식 설명
동등
비교
피연산자 == 피연산자 두 피연산자의 값이 같은지를 검사
피연산자 != 피연산자 두 피연산자의 갑이 다른지를 검사
크기
비교
피연산자 > 피연산자 피연산자 1이 큰지를 검사
피연산자 >= 피연산자 피연산자 1이 크거나 같은지를 검사
피연산자 < 피연산자 피연산자 1이 작은지를 검사
피연산자 <= 피연산자 피연산자 1이 작거나 같은지를 검사
  • 동등 비교 연산자는 모든 타입에 사용 (boolean 타입 포함)
  • 크기 비교 연산자는 boolean 타입 제외한 모든 기본 타입에 사용
  • 흐름 제어문인 조건문(if), 반복문(for, while)에서 주로 이용 (실행 흐름을 제어할 때 사용)

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

  • 논리곱(&&), 논리합(||), 배타적 논리합(^), 논리 부정(!) 연산 수행
  • 피연산자는 boolean 타입만 사용 가능
구분 연산식 결과 설명
AND
(논리곱)
true &&
또는
&
true true 피연산자 모두가 true일 경우에만 연산 결과는 true
true false false
false true false
false false false
OR
(논리합)
true ||
또는
|
true true 피연산자 중 하나만 true이면 연산 결과는 true
true false true
false true true
false false false
XOR
(베타적
논리합)
true ^ true false 피연산자가 하나는 true이고 다른 하나가 false일 경우에만 연산 결과는 true
true false true
false true true
false false false
NOT
(논리부정)
  ! true false 피연산자의 논리값을 바꿈
  false true

 

비트 연산자 (&, |, ^, ~, <<, >>, >>>)

  • 비트(bit) 단위로 연산하므로 0과 1이 피연산자
  • 0과 1로 표현이 가능한 정수 타입만 비트 연산 가능
  • 실수 타입인 float과 double은 비트 연산 불가

종류

  • 비트 논리 연산자(&, |, ^, ~)
  • 비트 이동 연산자(<<, >>, >>>)

비트 논리 연산자

  • 피연산자가 boolean타입일 경우 일반 논리 연산자
  • 피연산자가 정수 타입일 경우 비트 논리 연산자로 사용
  • 비트 연산자는 피연산자를 int타입으로 자동 타입 변환 후 연산 수행
구분 연산식 결과 설명
AND
(논리곱)
1 & 1 1 두 비트가 모두 1일 경우에만 연산 결과는 1
1 0 0
0 1 0
0 0 0
OR
(논리합)
1 | 1 1 두 비트 중 하나만 1이면 연산 결과는 1
1 0 1
0 1 1
0 0 0
XOR
(배타적
논리합)
1 ^ 1 0 두 비트 중 하나는 1이고 다른 하나가 0일 경우 연산 결과는 1
1 0 1
0 1 1
0 0 0
NOT
(논리부정)
  ~ 1 0 보수
  0 1

 

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

  • 정수 데이터의 비트를 좌측 또는 우측으로 밀어 이동시키는 연산 수행

 

구분 연산식 설명
이동
(쉬프트)
a << b 정수 a의 각 비트를 b만큼 왼쪽으로 이동 (빈자리는 0으로 채워진다.)
a >> b 정수 a의 각 비트를 b만큼 오른쪽으로 이동 (빈자리는 정수 a의 최상위 부호 비트(MSB)와 같은 값으로 채워진다.)
a >>> b  정수 a의 각 비트를 오른쪽으로 이동 (빈자리는 0으로 채워진다.)

 

대입 연산자(=, +=, -=, *=, /=, &=, &=, ^=, |=, <<=, >>=, >>>=)

  • 오른쪽 피연산자의 값을 좌측 피연산자인 변수에 저장
  • 모든 연산자들 중 가장 낮은 연산 순위 -> 제일 마지막에 수행

종류

  • 단순 대입 연산자
  • 복합 대입 연산자 (정해진 연산을 수행한 후 결과를 변수에 저장)

대입 연산자의 종류

구분 연산식 설명
단순 대입 연산자 변수 = 피연산자 우측의 피연산자의 값을 변수에 저장
복합 대입 연산자 변수 += 피연산자 우측의 피연산자의 값을 변수의 값을 더한 후에 다시 변수에 저장 (변수 = 변수 + 피연산자와 동일)
변수 -= 피연산자 우측의 피연산자의 값을 변수의 값에서 뺀 후에 다시 변수에 저장 (변수 = 변수 - 피연산자와 동일)
변수 *= 피연산자 우측의 피연산자의 값을 변수의 값과 곱한 후에 다시 변수에 저장 (변수 = 변수*피연산자와 동일)
변수 /= 피연산자 우측의 피연산자의 값으로 변수의 값을 나눈 후에 다시 변수에 저장 (변수 = 변수/피연산자와 동일)
변수 %= 피연산자 우측의 피연산자의 값으로 변수의 값을 나눈 후에 나머지를 변수에 저장 (변수 = 변수/피연산자와 동일)
변수 &= 피연산자 우측의 피연산자의 값과 변수의 값을 & 연산 후 결과를 변수에 저장 (변수 = 변수&피연산자와 동일)
변수 |= 피연산자 우측의 피연산자의 값과 변수의 값을 | 연산 후 결과를 변수에 저장 (변수 = 변수|피연산자와 동일)
변수 ^= 피연산자 우측의 피연산자의 값과 변수의 값ㅇ르 ^ 연산 후 결과를 변수에 저장 (변수 = 변수^피연산자와 동일)
변수 <<= 피연산자 우측의 피연산자의 값과 변수의 값을 << 연산 후 결과를 변수에 저장 (변수 = 변수<<피연산자와 동일)
변수 >>= 피연산자 우측의 피연산자의 값과 변수의 값을 >> 연산 후 결과를 변수에 저장 (변수 = 변수>>피연산자와 동일)
변수 >>>= 피연산자 우측의 피연산자의 값과 변수의값을 >>> 연산 후 결과를 변수에 저장 (변수 = 변수>>> 피연산자와 동일)

 

삼항 연산자란?

  • 세 개의 피연산자를 필요로 하는 연산자
  • 앞의 조건식 결과에 따라 콜론 앞 뒤의 피연산자 선택 => 조건 연산식
int score = 95;
char grade = (score>90) ? 'A' : 'B'

=======================================================

int score = 95;
char grade;
if(score>90) {
	grade = 'A';
} else {
	grade = 'B';
}
  • 위에 코드랑 밑에 코드는 값은 결과값을 가진다.


이렇게 오늘은 코딩에서 자주 쓰이는 연산자에 대해 알아보았습니다. 다음에는 이 연산자를 직접 써서 실습을 해보겠습니다.

반응형