이번 포스트에서는 자바 연산자에 대해 알아보겠습니다.
연산자 (Operator) 정의
- 프로그램에서 데이터를 처리하여 결과를 산출하는 것을 연산(operation)이라 한다.
- 연산에 사용되는 표시나 기호를 연산자(operator)라고 한다.
- 연산되는 데이터는 피연산자(operand)라고 한다.
예) 산술연산 +, -, *, /, %
연산자의 종류
자바에서 제공하는 연산자의 종류는 아래의 표와 같습니다.
종류 | 연산자 | 우선순위 |
증감 연산자 | ++, -- | 1순위 |
산술 연산자 | +, -, *, /, % | 2순위 |
시프트 연산자 | >>, <<, >>> | 3순위 |
비교 연산자 | >, <. >=, <=, ==, != | 4순위 |
비트 연산자 | &, |, ^, ~ | ~만 1순위, 나머지는 5순위 |
논리 연산자 | &&, ||, ! | !만 1순위, 나머지는 6순위 |
조건(삼항) 연산자 | ?, : | 7순위 |
대입 연산자 | =, *=, /=, %=, +=, -= | 8순위 |
지금부터 각각의 연산자에 대해 구체적으로 알아보도록 할까요?
증감 연산자
증감연산자는 피연산자의 값을 1씩 증가 또는 감소시키는 연산자이다. 증감 연산자가 변수 앞에 위치하느냐 변수 뒤에 위치하느냐에 따라 결과 값이 달라진다.
구분 | 연산자 | 설명 |
증감 연산자 | x++ | 먼저 해당 연산을 수행한 후 피연산자의 값을 1증가 시킴 |
++x | 먼저 피연산자의 값을 1증가 시킨 후 해당 연산을 수행함 | |
x-- | 먼저 해당 연산을 수행한 후 피연산자의 값을 1감소 시킴 | |
--x | 먼저 피연산자의 값을 1감소 시킨 후 해당 연산을 수행함 |
// 증감연산자 ++, --
int x = 10;
//int y = x++; // y = x; x = x + 1;
int y = ++x; // x = x + 1; y = x;
System.out.println("x = " + x);
System.out.println("y = " + y);
산술 연산자
가장 기본이 되는 연산자로 4칙 연산(+, -, *, /)과 나머지 값을 구하는 나머지 연산자(%)가 있다.
구분 | 연산자 | 설명 |
산술 연산자 | + | 두 수에 대한 덧셈 |
- | 두 수에 대한 뺄셈 | |
* | 두 수에 대한 곱셈 | |
/ | 두 수에 대한 나눗셈 | |
% | 두 수를 나눈 후 그 나머지를 반환한다. |
4칙 연산은 다 아는 내용이라 생략하고, 나머지 연산자만 알아봅니다.
나머지 연산자(%)는 프로그래밍 작업 시 자주 사용되는 연산자입니다. 나머지 연산자의 결과 값은 왼쪽 피연산자의 값을 오른쪽 피연산자의 값으로 나눈 나머지 값을 반환합니다.
예를 들어 (x % n) 의 경우 x의 값이 어떤 수가 들어오든 나올 수 있는 값의 범위는 0 부터 n-1의 범위를 갖습니다.
아래와 같이 (x % 7) 연산의 값의 범위는 0 ~ 6의 값만 나오게 됩니다. 다시 말해 결과값이 회귀하게 되는 것이죠. 그래서 알고리즘을 구현한다던지 이럴 때 자주 사용되는 연산자입니다. 꼭 기억하세요.
int x = 1234;
System.out.println("x % 7 = " + (x % 7)); // 0 ~ 6 사이의 값을 반환
System.out.println("x % 2 = " + (x % 2)); // 0 ~ 1 사이의 값을 반환, x값이 홀수인지 짝수인지 구분에 유용
시프트(shift) 연산자
시프트 연산자는 bit단위의 연산처리를 하며 자료의 가공을 위해 오른쪽 또는 왼쪽으로 이동하여 값에 대한 변화를 일으키는 연산자입니다.
구분 | 연산자 | 설명 |
시프트 연산자 | >> | bit값을 오른쪽으로 이동 (빈 자리는 부호값으로 대입) 한다. |
<< | bit값을 왼쪽으로 이동 (빈 자리는 0으로 대입) 한다. | |
>>> | bit값을 오른쪽으로 이동 (빈 자리는 0으로 대입) 한다. |
// 쉬프트 연산자 >>, <<, >>>
int x = 64; // -64;
int n = 2;
System.out.println("x >> n = " + (x >> n)); // 나눗셈, (x / 2^n)
System.out.println("x << n = " + (x << n)); // 곱셈, (x * 2^n)
System.out.println("x >>> n = " + (x >>> n));
System.out.println("x >> 34 = " + (x >> 34)); // x / 2^(n % 32)
System.out.println("x << 34 = " + (x << 34));
System.out.println("x >>> 34 = " + (x >>> 34));
비교 연산자
변수나 상수의 값을 비교할 때 쓰이는 연산자로서 결과가 항상 true 또는 false인 논리값(boolean)이어야 한다.
구분 | 연산자 | 설명 |
비교 연산자 | > | 크다 |
< | 작다 | |
>= | 크거나 같다 | |
<= | 작거나 같다 | |
== | 피연산자들의 값이 같다 | |
!= | 피연산자들의 값이 같지 않다 |
// 비교연산자 <, >, <=, >=, ==, !=
int x = 12;
int y = 15;
// boolean bool = x > y;
// boolean bool = x < y;
boolean bool = (x = x + 5) != y;
System.out.println("bool = " + bool);
논리 연산자
논리 연산자는 피연산자의 값이 true나 false인 논리 값을 가지고 다시 한번 조건 연산하는 연산자이다.
논리 연산자의 종류(1)
구분 | 연산자 | 의미 | 설명 |
논리 연산자 | & | and (논리곱) | 주어진 조건들이 모두 true일 때만 true를 나타낸다. |
| | or (논리합) | 주어진 조건들 중 하나라도 true이면 true를 나타낸다. | |
! | not (부정) | true는 false로 false는 true로 나타낸다. |
논리 연산자의 종류(2)
구분 | 설명 |
&& | 선조건이 true일 때만 후조건을 실행하며 선조건이 false이면 후조건을 실행하지 않는다. |
|| | 선조건이 true이면 후조건을 실행하지 않으며 선조건이 false일 때만 후조건을 실행한다. |
논리 연산자의 경우 논리곱(&, &&), 논리합(|, ||) 연산자가 2가지로 사용이 가능하다. 이들의 사용법은 차이가 있으며, 일반적으로 &&, || 이 연산자를 주로 사용한다.
// 논리연산자 &, |, !, &&, ||
x = 20;
y = 30;
bool = x < y || (x = x + 15) > y;
System.out.println("bool = " + bool);
System.out.println("x = " + x);
대입 연산자
특정한 상수 값이나 변수 값 또는 객체를 변수에 전달하여 기억시킬 때 사용하는 연산자이다.
구분 | 연산자 | 설명 |
대입 연산자 | = | 연산자를 중심으로 오른쪽 변수값을 왼쪽 변수에 대입한다. |
+= | 왼쪽 변수에 더하면서 대입한다. | |
-= | 왼쪽 변수값에서 빼면서 대입한다. | |
*= | 왼쪽 변수에 곱하면서 대입한다. | |
/= | 왼쪽 변수에 나누면서 대입한다. | |
%= | 왼쪽 변수에 나머지 값을 구하면서 대입한다. |
// 대입연산자
int num = 120;
num += 30; // 풀어서 쓰면 num = num + 30; 과 같다.
System.out.println("num = " + num);
// num = num + 3.14F; // 에러 발생, 아래 코드와 같이 형 변환 해줘야 함.
num = (int)(num + 3.14F); // int형으로 형 변환 했으므로 정상처리
num += 3.14F; // 복합대입연산자를 사용시 대상 타입으로 자동 형 변환 해줌.
// 복합대입연산자의 형변환 : 복합대입연산자의 경우 최종 할당되는 변수의 데이터 타입으로 형 변환되서 계산됨.
// int x = 10; double y = 2.3;
// x += y; 이 코드는 x = (데이터타입)(x + y) 이렇게 계산이 됨.
int i = 10;
double rate = 0.01;
i += (i * rate); // 형변환되어서 들어가므로 에러 아님.
비트 연산자
피연산자 즉 연산의 대상이 되는 값들을 내부적으로 bit단위로 변경한 후 연산을 수행하는 연산자이다.
구분 | 연산자 | 설명 |
비트 연산자 | & | 비트 단위의 AND |
| | 비트 단위의 OR | |
^ | XOR (배타적 OR) | |
~ | 단항 연산자 이며, 비트를 반전한다. 0은 1로 1은 0으로 만듬 |
// 비트 연산자 &, |, ^, ~
int num = 170;
System.out.println("num & 15 = " + (num & 15)); // num & 15 = 10 , mask 연산
System.out.println("num | 15 = " + (num | 15)); // num | 15 = 63, 특정 비트를 1로 셋팅
System.out.println("num ^ 15 = " + (num ^ 15)); // num ^ 15 = 58, 특정 비트를 반전시킬 때.
System.out.println("~num = " + (~num)); // ~num , 비트 반전, 1의 보수 표현
조건 연산자(삼항 연산자)
하나의 조건을 정의하여 만족 시에는 ‘참값’을 반환하고 만족하지 못할 시에는 ‘거짓값’을 반환하여 단순 비교에 의해 변화를 유도하는 연산자이다. 피연산자가 3개라 해서 삼항 연산자라고도 부른다.
구분 | 연산자 | 설명 | 구성 |
조건 연산자 | ? : | 제어문의 단일 비교문과 유사하다. | 조건식 ? 참값 : 거짓값 |
// 조건 연산자 cond ? true : false
char gender = 'F';
System.out.println(gender == 'M' ? "남성" : "여성");
// 어떤 수가 양수, 음수, 영인지 판별하시오.
int no = -12;
System.out.println(no == 0 ? "영" : ( no > 0 ? "양수" : "음수"));
'프로그래밍 > JAVA' 카테고리의 다른 글
[Java] 변수와 자료형 (0) | 2021.01.11 |
---|---|
[Java] 자바 시작하기 (0) | 2021.01.11 |
댓글