본문 바로가기

Language/Java

[Java] 기본 연산자

항과 연산자

연산자(operator) : 연산에 사용하는 기호

항(operand) : 연산에 사용하는 값

연산자 설명 연산 예
단항 연산자 항이 한개인 연산자 ++num
이항 연산자 항이 두개인 연산자 num1 + num2;
삼항 연산자 항이 세개인 연산자 (5 > 3) ? 1 : 0;

연산자 우선순위 : 단항 > 이항 > 삼항 순서로 높음

 

 

 

 

대입 연산자

대입 연산자(assignment operator) : 변수에 값을 대입하는 연산자

이항 연산자 중 우선순위가 가장 낮은 연산자

왼쪽 변수 = 오른쪽 변수 (또는 식)

오른쪽 변수 값이나 식의 연산 결과 값을 왼쪽 변수에 대입

 

대입 연산자를 기준으로 왼쪽에 있는 변수를 lValue(left value), 오른쪽에 있는 변수를 rValue(right value)라고 한다.
대입 연산자를 사용하면 항상 rValue 값을 lValue에 대입한다.
값이 대입되는 lValue에는 항상 변수나 상수가 와야 한다.
rValue에는 변수나 숫자(상수)가 올 수 있다.

 

 

 

 

부호 연산자

연산자 기능 연산 예
+ 변수나 상수 값을 양수로 만든다 +3
- 변수나 상수 값을 음수로 만든다 -3

부호 연산자는 연산에 쓰는 이항 연산자이면서 부호를 나타내는 단항 연산자로도 사용한다.

int num = 10;

System.out.println(+num); //값 10이 그대로 출력됨
System.out.println(-num); //값 10에 -가 붙어 -10이 출력되지만 num 값이 실제로 바뀌지 않음
System.out.println(num);  //값 10이 그대로 출력됨

num = -num;               //num 값을 음수로 바꿔서 다시 num에 대입
System.out.println(num);  //값 -10이 출력됨

 

 

 

 

산술 연산자

산술 연산자는 사칙 연산에서 사용하는 연산자

연산자 기능 연산 예
+ 두 항을 더한다 5 + 3
- 앞에 있는 항에서 뒤에 있는 항을 뺀다 5 - 3
* 두 항을 곱한다 5 * 3
/ 앞에 있는 항에서 뒤에 있는 항을 나누어 몫을 구한다 5 / 3
% 앞에 있는 항에서 뒤에 있는 항을 나누어 나머지를 구한다 5 % 3

 

산술 연산자의 우선순위는 일반 수학의 산술 연산과 같다.

나머지를 구하는 % 연산자의 우선순위는 *, / 연산자의 우선순위와 동일하다.

 

[실습] 산술 연산자를 사용하여 총점과 평균 구하기
package operator;

public class operationEx1 {
	public static void main(String[] args) {
		int mathScore = 90;
		int engScore = 70;
		
		int totalScore = mathScore + engScore;  //총점 구하기
		System.out.println(totalScore);
		
		double avgScore = totalScore / 2.0;     //평균 구하기
		System.out.println(avgScore);
	}
}

 

[실습] 산술 연산자를 사용하여 총점과 평균 구하기 2
package operator;

public class operationEx1 {
	public static void main(String[] args) {
		int mathScore = 90;
		int engScore = 70;
		int korScore = 86;
		
		int totalScore = mathScore + engScore + korScore;
		System.out.println(totalScore);
		
		double avgScore = totalScore / 3.0;
		System.out.println(avgScore);
	}
}

 

 

 

 

증가, 감소 연산자

증가, 감소 연산자는 단항 연산자

연산자 기능 연산 예
++ 항의 값에 1을 더한다 val = ++num; //먼저 num 값이 1 증가한 후 val 변수에 대입
val = num++; //val 변수에 기존 num 값을 먼저 대입한 후 num 값 1 증가
-- 항의 값에서 1을 뺀다 val = --num; //먼저 num값이 1 감소한 후 val 변수에 대입
val = num--; //val 변수에 기존 num 값을 먼저 대입한 후 num 값 1 감소

연산자를 피연산자 앞에 쓰는 경우와 뒤에 쓰는 경우 결괏값이 전혀 다르므로 주의해야 한다.

 

[실습] 증가, 감소 연산자를 사용하여 값 연산하기
package operator;

public class operationEx2 {
	public static void main(String[] args) {
		int gameScore = 150;
		
		int lastScore1 = ++gameScore;
		System.out.println(lastScore1);
		
		int lastScore2 = --gameScore;
		System.out.println(lastScore2);
	}
}

 

 

 

 

관계 연산자

관계 연산자는 항이 두 개인 이항 연산자

두 개의 항 중 어느 것이 더 큰지, 작은지, 같은지 등의 여부 검사

관계 연산자의 결과 값은 참(true) 또는 거짓(false)으로 반환, 비교 연산자라고도 함

연산자 기능 연산 예
> 왼쪽 항이 크면 참, 아니면 거짓을 반환한다 num > 3;
< 왼쪽 항이 작으면 참, 아니면 거짓을 반환한다 num < 3;
>= 왼쪽 항이 오른쪽 항보다 크거나 같으면 참, 아니면 거짓을 반환한다 num >= 3;
<= 왼쪽 항이 오른쪽 항보다 작거나 같으면 참, 아니면 거짓을 반환한다 num <= 3;
== 두개의 항이 같으면 참, 아니면 거짓을 반환한다 num == 3;
!= 두개의 항이 다르면 참, 아니면 거짓을 반환한다 num != 3;

 

		int myAge = 27;
		boolean value = (myAge > 25);
		System.out.println(value);

 

 

 

 

논리 연산자

연산자 기능 연산 예
&& (논리 곱) 두 항이 모두 참인 경우에만 결과 값이 참, 그렇지 않은 경우는 거짓이다 boolean val = (5 > 3) && (5 > 2);
|| (논리 합) 두 항중 하나의 항만 참이면 결과 값은 참, 그렇지 않은 경우는 거짓이다 boolean val = (5 > 3) || (5 < 2);
! (부정) 단항 연산자
참인 경우 거짓으로 바꾸고, 거짓인 경우 참으로 바꾼다
boolean val = !(5 > 3);

논리 연산자는 주로 관계 연산자와 함께 사용

관계 연산자의 우선순위가 논리 연산자보다 높으므로, 관계 연산자의 결과 값을 기반으로 논리 연산자의 결괏값 계산

 

		int num1 = 10;
		int num2 = 20;
		
		boolean flag = (num1 > 0) && (num2 > 0);
		System.out.println(flag);  //flag는 참
		
		flag = (num1 < 0) && (num2 > 0);
		System.out.println(flag);  //flag는 거짓
		
		flag = (num1 < 0) || (num2 > 0);
		System.out.println(flag);  //flag는 참

 

[실습] 단락 회로 평가 실습하기
package operator;

public class OperationEx3 {
	public static void main(String[] args) {
		int num1 = 10;
		int i = 2;
		
		boolean value = ((num1 = num1 + 10) < 10) && ((i = i + 2) < 10);
		//논리곱에서 앞 항의 결과 값이 거짓이므로 ((i = i + 2) < 10) 이 문장은 실행되지 않음
		System.out.println(value);
		System.out.println(num1);
		System.out.println(i); //논리곱에서 앞 항이 거짓이면 뒷 항이 실행되지 않아 i 값은 그대로
		
		value = ((num1 = num1 + 10) > 10) || ((i = i + 2) < 10);
		//논리합에서 앞 항의 결과가 참이므로 ((i = i + 2) < 10) 이 문장은 실행되지 않음
		System.out.println(value);
		System.out.println(num1);
		System.out.println(i); //논리합에서 앞 항이 참이면 뒷 항이 실행되지 않아 i 값은 그대로
	}
}

 

 

 

 

복합 대입 연산자

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

우선순위가 가장 낮은 연산자

연산자 기능 연산 예
+= 두 항의 값을 더해서 왼쪽 항에 대입한다 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 &= num2;
num1 = num1 & num2; 와 같음
|= 두 항의 | 비트 연산 후 그 값을 왼쪽 항에 대입 num1 |= num2;
num1 = num1 | num2; 와 같음
^= 두 항의 ^ 비트 연산 후 그 값을 왼쪽 항에 대입 num1 ^= num2;
num1 = num1 ^ num2; 와 같음

복합 대입 연산자를 사용하면 변수를 반복적으로 사용하지 않아도 되는 장점이 있다.

 

 

 

 

조건 연산자

조건 연산자는 연산에 필요한 항의 개수가 세 개다. 그래서 삼항 연산자라고 한다.

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

연산자 기능 연산 예
조건식 ? 결과1 : 결과2; 조건식이 참이면 결과1, 조건식이 거짓이면 결과2가 선택된다 int num = (5 > 3) ? 10 : 20;

 

[실습] 조건 연산자를 사용하여 부모님의 나이 비교하기
package operator;

public class OperationEx4 {
	public static void main(String[] args) {
		int fatherAge = 45;
		int motherAge = 47;
		
		char ch;
		ch = (fatherAge > motherAge)? 'T' : 'F';
		
		System.out.println(ch);
	}
}

 

 

 

https://github.com/hyunjin1292/Java_study

 

GitHub - hyunjin1292/Java_study: java study book practice example

java study book practice example. Contribute to hyunjin1292/Java_study development by creating an account on GitHub.

github.com


※ 이지스퍼블리싱의 'Do it! 자바 프로그래밍 입문' 책을 보고 공부한 내용을 정리하고 있습니다.

'Language > Java' 카테고리의 다른 글

[Java] 조건문  (0) 2022.08.12
[Java] 비트 연산자  (0) 2022.08.10
[Java] 형 변환  (0) 2022.07.22
[Java] 상수와 리터럴  (0) 2022.07.20
[Java] 자료형  (0) 2022.07.19