자바에서는 우리가 흔히 사용하는 사칙연산 외에도 다른 연산이 존재합니다.
크게 보면 이러한 사칙연산을 포함한 산술연산자, 대입을 위한 대입 연산자, 다양한 문법에 사용 가능한 증감 연산자, 변수들의 비교를 위한 비교연산자, 참 거짓을 판단하는 논리연산자, 비트 단위 연산의 비트 연산자 등이 있습니다.
이런 다양한 연산자들을 조금 자세히 볼까요?
1. 산술연산자
산술연산자는 우리가 알고 있는 사칙연산( +, -, *, /) 외에도 % 연산이 존재합니다.
또한 다른 연산자에도 산술연산이 많이 포함되어 있으며 가장 많이 쓰는 연산자라고 할 수 있습니다.
연산을 할 때 두 개 이상의 연산자가 들어갈 수도 있겠죠?
산술연산자 | 설명 |
+ | 왼쪽의 피연산자에 오른쪽 피연산자를 더합니다. |
- | 왼쪽의 피연산자에 오른쪽 피연산자를 뺍니다. |
* | 왼쪽의 피연산자에 오른쪽 피연산자를 곱합니다. |
/ | 왼쪽의 피연산자에 오른쪽 피연산자를 나눕니다. |
% | 왼쪽의 피연산자에 오른쪽 피연산자를 나눈 후, 그 나머지를 반환합니다. |
int num1 = 10;
int num2 = 15;
System.out.println("+연산자 결과 : " + (num1 + num2));
System.out.println("-연산자 결과 : " + (num1 - num2));
System.out.println("*연산자 결과 : " + (num1 * num2));
System.out.println("/연산자 결과 : " + (num1 / num2));
System.out.println("%연산자 결과 : " + (num1 % num2));
해당 코드를 출력시키면 어떤 결과가 나올까요?
이런 결과가 나옵니다!
나누기 연산자는 나눈 후 값의 나머지는 버리고 출력이 된다는 걸 알 수 있습니다.
그런데 이런 연산에서도 우선순위가 있습니다!
연산은 왼쪽에서부터 순차적으로 하는 것을 기본 시 하지만 위 그림처럼 +보다는 *가 먼저 처리됩니다. 또한 ( ) 안에 들어있는 것을 가장 먼저 처리합니다.
2. 대입 연산자
대입 연산자는 변수에 값을 대입할 때 주로 사용되는 연산자입니다.
대입 연산자는 산술 연산자와 다르게 결합의 방향이 오른쪽에서 왼쪽입니다.
대입 연산자 | 설명 |
= | 왼쪽의 피연산자에 오른쪽의 피연산자를 대입합니다 |
+= | 왼쪽의 피연산자에 오른쪽의 피연산자를 더한 후 그 결과를 왼쪽의 피연산자에 대입합니다. |
-= | 왼쪽의 피연산자에서 오른쪽의 피연산자를 뺀 후 그 결과를 왼쪽의 피연산자에 대입합니다. |
*= | 왼쪽의 피연산자에 오른쪽의 피연산자를 곱한 후 그 결과를 왼쪽의 피연산자에 대입합니다. |
/= | 왼쪽의 피연산자를 오른쪽의 피연산자로 나눈 후 그 결과를 왼쪽의 피연산자에 대입합니다. |
%= | 왼쪽의 피연산자를 오른쪽의 피연산자로 나눈 후 그 나머지를 왼쪽의 피연산자에 대입합니다. |
&= | 왼쪽의 피연산자를 오른쪽의 피연산자와 비트 AND 연산 후 그 결과를 왼쪽의 피연산자에 대입합니다. |
|= | 왼쪽의 피연산자를 오른쪽의 피연산자와 비트 OR 연산 후 그 결과를 왼쪽의 피연산자에 대입합니다. |
^= | 왼쪽의 피연산자를 오른쪽의 피연산자와 비트 XOR 연산 후 그 결과를 왼쪽의 피연산자에 대입합니다. |
int num1 = 10, num2 = 10, num3 = 10, num4 = 10, num5 = 10;
num1 += 5; //num1 = num1 + 5; 와 같음
num2 -= 5; //num2 = num2 - 5; 와 같음
num3 *= 5; //num3 = num3 * 5; 와 같음
num4 /= 5; //num4 = num4 / 5; 와 같음
num5 %= 5; //num5 = num5 % 5; 와같음
System.out.println("+=연산자 결과 : " + num1);
System.out.println("-=연산자 결과 : " + num2);
System.out.println("*=연산자 결과 : " + num3);
System.out.println("/=연산자 결과 : " + num4);
System.out.println("%=연산자 결과 : " + num5);
위 코드에서 보면 변수를 선언할 때 초기화를 시켜주는 과정에서 대입 연산자가 사용되었습니다.
그리고 해당 출력값을 보면 다음과 같습니다.
type 변수 = 변수 + 값; type += 변수;
이런 형태로 출력이 됩니다.
산술 연산은 왼쪽부터 진행이 되지만 대입 연산은 위 그림과 같이 오른쪽부터 진행이 됩니다. 따라서 여러 개의 대입 연산이 있을 때는 가장 오른쪽에 있는 값이 순차적으로 들어갑니다.
3. 증감 연산자
증감 연산자 | 설명 |
++i | 먼저 피연산자의 값을 1 증가시킨 후에 해당 연산을 진행합니다. |
i++ | 먼저 해당 연산 수행 후 피연산자의 값을 1 증가시킵니다. |
--i | 먼저 피연산자의 값을 1 감소시킨 후에 해당 연산을 진행합니다. |
i-- | 먼저 해당 연산 수행 후 피연산자의 값을 1 감소시킵니다. |
int num1 = 10, num2 = 10, num3 = 10, num4 = 10;
System.out.println("++i연산자 결과 : " + ++num1);
System.out.println("i++연산자 결과 : " + num2++);
System.out.println("--i연산자 결과 : " + --num3);
System.out.println("i--연산자 결과 : " + num4--);
위 코드의 출력은 다음과 같습니다.
++나 --가 앞에 있을 경우 연산을 먼저 수행하고 값이 들어가고 뒤에 있을 경우 값은 명령 수행 후에 변화합니다.
4. 비교 연산자
비교 연산자는 말 그대로 피연산자의 값을 비교합니다.
비교 연산자 | 설명 |
== | 왼쪽의 피연산자와 오른쪽의 피연산자가 같으면 참을 반환합니다. |
!= | 왼쪽의 피연산자와 오른쪽의 피연산자가 같지 않으면 참을 반환합니다. |
> | 왼쪽의 피연산자가 오른쪽의 피연산자보다 크면 참을 반환합니다. |
>= | 왼쪽의 피연산자가 오른쪽의 피연산자보다 크거나 같으면 참을 반환합니다. |
< | 왼쪽의 피연산자가 오른쪽의 피연산자보다 작으면 참을 반환합니다. |
<= | 왼쪽의 피연산자가 오른쪽의 피연산자보다 작거나 같으면 참을 반환합니다. |
int i1 = 1, i2 = 2;
System.out.println("==연산자 결과 : " + (i1 == i2));
System.out.println("!=연산자 결과 : " + (i1 != i2));
System.out.println(">연산자 결과 : " + (i1 > i2));
System.out.println(">=연산자 결과 : " + (i1 >= i2));
System.out.println("<연산자 결과 : " + (i1 < i2));
System.out.println("<=연산자 결과 : " + (i1 <= i2));
비교 연산자는 비교적 어렵지 않으시죠?
5. 논리 연산자
논리 연산자는 식을 판단해서 참인지 거짓인지를 구분하여 리턴해주는 연산자입니다.
논리 연산자 | 설명 |
&& | 논리식이 모두 참이면 참을 반환합니다. (논리 AND 연산) |
|| | 논리식 중에서 하나라도 참이면 참을 반환합니다. (논리 OR 연산) |
! | 논리식의 결과가 참이면 거짓을, 거짓이면 참을 반환합니다. (논리 NOT 연산) |
6. 비트 연산자
비트 연산자는 논리 연산자와 비슷할 수 있지만 비트 단위의 논리 연산을 할 때 사용합니다.
비트 단위에서 왼쪽 또는 오른쪽으로 이동시키거나 보수를 만들 때 사용되기도 합니다.
비트 연산자 | 설명 |
& | 대응되는 비트가 모두 1이면 1을 반환합니다. (비트 AND 연산) |
| | 대응되는 비트 중에서 하나라도 1이면 1을 반환합니다. (비트 OR 연산) |
^ | 대응되는 비트가 서로 다르면 1을 반환합니다. (비트 XOR 연산) |
~ | 비트를 1이면 0으로, 0이면 1로 반전시킵니다. (비트 NOT 연산, 1의 보수) |
<< | 명시된 수만큼 비트들을 전부 왼쪽으로 이동시킵니다. (left shift 연산) |
>> | 부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킵니다. (right shift 연산) |
AND 연산은 두 비트를 비교한 후에 둘 다 1일 경우 0을 반환합니다.
하나라도 0이면 0을 반환합니다.
OR 연산은 두 비트를 비교하고 둘 중 하나라도 1이면 1을 반환합니다.
두 비트 모두 0일 때만 0을 반환합니다.
XOR 연산은 두 비트를 비교하여 두 비트가 둘 다 0이거나 둘 다 1일 경우 0을 반환합니다.
하나는 1하나는 0일 경우 0을 반환합니다.
NOT은 어떤 비트에서 비트의 값을 반전시켜줍니다.
즉, 1일 경우 0을 반환하고 0일 경우 1을 반환합니다.
7. 삼항연산자
삼항연산자는 피 연산자 3개가 필요한 연산자입니다.
(조건식) ? 참일때 반환값 : 거짓일때 반환값;
을 기본 형태로 하는데요.
조건식에 따라 결과가 참이면 왼쪽 반환값을 반환하고 거짓이면 오른쪽 반환값을 반환합니다.
삼 항 연산자는 2개를 사용할 수도 있습니다.
(조건식) ? (조건식) ? 참일때반환값 : 거짓일때 반환값 : 거짓일때 반환값;
int a = 10;
int b = 7;
int result = (a > b) ? a - b : b - a;
System.out.println(result);
String res = (a > b) ? "a가 b보다 크다" : (a < b) ? "a가 b보다 작다" : "a와 b는 같다";
System.out.println(res);
위 코드를 이클립스에서 실행시켜보면 이렇게 출력이 되네요.
'Java 관련 > Java' 카테고리의 다른 글
[Java] 제어문 - 조건문(switch 문) (0) | 2021.10.09 |
---|---|
[Java] 제어문 - 조건문(if 문) (0) | 2021.10.08 |
[Java] 형 변환(Type Casting) - TypeToType (0) | 2021.10.06 |
[Java] 자바에서 여러가지 타입(Type) (0) | 2021.10.05 |
[Java] 변수 표기법, 출력문, 주석 (0) | 2021.10.04 |