본문 바로가기
Java/문법

Java 연산자

by ssury94 2024. 12. 11.
 
 
 

 

3+4 에서

3,4는 항, +는 연산자

 

그러면 자바에서의 연산자는?

 

항의 개수에 따라 단항, 이항, 삼항 연산자

  우선순위 예시
단항 연상자 1순위 ++num
이항 연산자 2순위 num1+num2;
삼항 연산자 3순위 (5 > 3) ? 1 : 0;

 

 

대입 연산자 =

변수에 값을 대입하는 연산자

이항 연산자 중 우선순위가 가장 낮음 (모든 연산을 끝낸 후 마지막 연산결과를 변수에 대입!)

int age = 24;

 

부호 연산자 +,-

음수 양수를 나타내는 단항 연산자로 사용 (+3, -3)

덧셈, 뺄셈에 쓰이는 이항 연산자이기도함

 

산술 연산자 +, -, *, /, %

사칙연산에 사용

사칙연산의 우선순위와 동일함 (%,/,* 1순위 , -+ 2순위)

+ 더하기 5+3
- 빼기 5-3
* 곱하기 5*3
/ 나누기의 몫 5/3
% 나누기의 나머지 5%3

 

증가, 감소 연산자 ++, --

단항연산자

연산자 앞이나 뒤에서 사용

값을 1만큼 늘리거나 1만큼 줄이기에 사용

++ 항의 값에 1 더함 val = ++num;
num값이 1 증가한 후 val변수에 대입
num이 5일때 실행하면 num은 6이 되고 val도 6이 된다.
val = num++;
val 변수에 기존 num값을 대입한 후 num값 1 증가
num이 5일때 실행하면 val은 5가되고 num은 6이 된다.
-- 항의 값에 1 뺌 val= --num;
num값이 1 감소한 후 val 변수에 대입
num이 5일때 실행하면 num =4, val =4 
val= num--;
val 변수에 기존 num값을 대입한 후 num값 1 감소
num이 5일때 실행하면 val=5, num=4

 

관계연산자 >,<, >=, <=, ==, !=

> 왼쪽항이 크면 참, 아니면 거짓 num > 3;
< 왼쪽항이 작으면 참, 아니면 거짓 num < 3;
>= 왼쪽항이 오른쪽항 이상이면  참, 아니면 거짓 num >= 3;
<= 왼쪽항이 오른쪽항 이하면 참, 아니면 거짓 num <= 3;
== 두 항이 같으면 참, 아니면 거짓 num == 3;
!= 두 항이 다르면 참, 아니면 거짓 num !=3;

 

 

논리 연산자 &&, ||, !

명제

두 명제가 모두 참이면 논리 곱

하나만 참이면 논리 합

참의 부정은 거짓, 거짓의 부정은 참

&& 논리곱 두 항이 모두 참일경우만 참, 그렇지 않으면 거짓 boolean val =
(5 > 3) && ( 5 > 2);
둘다 ture = true
|| 논리합 한 항만 참이면 결과값은 참, 두 항이 거짓이면 거짓 boolean val =
(5 > 3) || ( 5 < 2);
(5 > 3)  ture = true
! 부정 단항 연산자
참인 경우 거짓, 거짓인 경우 참으로 바꿈
boolean val = ! (5>3);
value = ((num1 = num1 + 10) < 10) && (i = i + 2) < 10;
System.out.println(value);
System.out.println(i);

(num1 = num1 + 10) < 10) 가 false라 뒷 항은 실행되지 않음

i = 2

value = ((num1 = num1 + 10) > 10) || (i = i + 2) < 10;
System.out.println(value);
System.out.println(i);

(num1 = num1 + 10) > 10) 가 true기 때문에 이미 논리합 true으로 끝나서 마찬가지로 뒷 항은 실행되지 않음

i = 2

 

이렇게 두 항을 모두 실행하지 않더라도 결과 값을 알 수 있어 나머지 항이 실행 되지 않는것을

단락 회로 평가 (Short Circuit Evaluation SCE)

라고 한다!

프로그래밍을 할 때 예상한 실행결과와 다를 수 있으니 주의해야한다.

 

복합 대입 연산자

대입 연산자와 다른 연산자를 조합해 하나의 연산자처럼 사용하는 연산자

대입 연산자처럼 우선순위가 가장 낮은 연산자 (모든 연산을 끝낸 후 마지막 연산결과를 변수에 대입!)

+= 두 항의 값을 더해서 왼쪽 항에 대입 num1 +=2;
num1 = num1 +2;
-= 왼쪽 항에서 오른쪽 항을 빼서 그 값을 왼쪽항에 대입 num1 -=2;
num1 = num1 - 2;
*= 두 항의 값을 곱해서 왼쪽 항에 대입 num1 *=2;
num1 = num1 * 2;
/= 왼쪽 항을 오른쪽항으로 나누어 그 몫을 왼쪽 항에 대입 num1 /=2;
num1 = num1 / 2;
%= 왼쪽 항을 오른쪽항으로 나누어 그 나머지를 왼쪽 항에 대입 num1 %=2;
num1 = num1 % 2;
<<= 비트를 왼쪽으로 이동하고, 그 값을 왼쪽 항에 대입 num1 <<=2;
num1 = num1 << 2;
>>= 비트를 오른쪽으로 이동하고, 그 값을 오른쪽 항에 대입
(왼쪽에 채워지는 비트값은 부호 비트와 동일)
num1 >>=2;
num1 = num1 >> 2;
>>>= 비트를 오른쪽으로 이동하고 그 값을 왼쪽 항에 대입
(왼쪽에 채워지는 비트 값은 0)
num1 >>>=2;
num1 = num1 >>> 2;
&= 두 항의 & 비트 연산 후 그 값을 왼쪽 항에 대입 num1 &=2;
num1 = num1 & 2;
|= 두 항의 | 비트 연산 후 그 값을 왼쪽 항에 대입 num1 |=2;
num1 = num1 | 2;
^= 두 항의 ^ 비트 연산 후 그 값을 왼쪽 항에 대입 num1 ^=2;
num1 = num1 ^2;

 

비트 연산자란?

 

조건 연산자

연산에 필요한 항의 개수가 세개인 삼항 연산자

주어진 조건식이 참인 경우와 거짓인 경우에 다른 결과값이 나온다.

조건식 ? 결과 1 : 결과 2; 조건식 결과가 참이면 결과 1
거짓이면 결과 2가 선택
int num =(5>3) ? 10 : 20;
(5>3)이 참이므로 num=10

 

// 10이 짝수인 경우에는 true 그렇지않으면 false를 출력하도록 만들기

num = 10;
boolean isEven;
isEven=num%2==0 ? true : false;
System.out.println(isEven);