카테고리 없음
연산자
달덩이><
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';
}
- 위에 코드랑 밑에 코드는 값은 결과값을 가진다.
이렇게 오늘은 코딩에서 자주 쓰이는 연산자에 대해 알아보았습니다. 다음에는 이 연산자를 직접 써서 실습을 해보겠습니다.
반응형