1. 항과 연산자
2. 항의 개수에 따른 연산자 구분
3. 항의 역할에 따른 연산자 구분
- 대입연산자
- 부호연산자
- 산술연산자
- 증가감소연산자
- 관계연산자
- 논리연산자
- 복합대입연산자
- 조건연산자
- 비트연산자
4. 단락 회로 평가(short circuit evaluation)
항과 연산자
- 항(operand)
- 연산에 사용되는 값
- 연산자(operator)
- 항을 이용하여 연산하는 기호
항의 개수에 따른 연산자 구분
연산자 | 설명 | 연산 예 |
단항 연산자 | 항이 한 개인 연산자 | ++num |
이항 연산자 | 항이 두 개인 연산자 | num1+num2 |
삼항 연산자 | 항이 세 개인 연산자 | (5>3)?1:0; |
항의 역할에 따른 연산자 구분
- 대입연산자,부호연산자,산술연산자,증가감소연산자,관계연산자,논리연산자,복합대입연산자,조건연산자,비트연산자
- 대입 연산자
- 변수에 값을 대입 하는 연산자
- 연산의 결과를 변수에 대입
- 우선 수위가 가장 낮은 연산자
- 왼쪽 변수(lValue)에 오른쪽 변수(값)(rValue)를 대입
package operandAndOperator;
public class OperationEx {
public static void main(String[] args) {
int age = 24;
System.out.println(age);// 결과: 24
// 나이를 의미하는 age 변수에 값 24를 대입함
int totalScore;
int mathScore = 100;
int engScore = 50;
totalScore = mathScore + engScore;
// 1) mathScore값과 engScore값을 더하여
// 2) 총점을 의미하는 totalScore 변수에 대입함.
System.out.println(totalScore);// 결과: 150
}
}
- 부호 연산자
- 더하기,뺴기 연산에 쓰는 이항 연산자이면서 부호를 나타내는 단항 연산자
- 양수/음수의 표현,값의 부호를 변경
- 변수에 +,- 를 사용한다고 해서 변수의 값이 변하는 것은 아님
- 변수의 값을 변경하려면 대입 연산자를 사용해야함.
연산자 | 기능 | 연산 예 |
+ | 변수나 상수 값을 양수로 만듭니다 | +3 |
- | 변수나 상수 값을 음수로 만듭니다 | -3 |
package operandAndOperator;
public class OperationEx2 {
public static void main(String[] args) {
int num = 10;
int num2 = -num;
System.out.println(num); // 결과:10
System.out.println(num2);// 결과:-10
// 변수에 +,-를 사용한다고 해서 변수의 값이 변하는 것은 아님
num = -num;
System.out.println(num);// 결과:-10
// 변수의 값을 변경하려면 대입 연산자를 사용해야함.
}
}
- 산술연산자
- 사칙연산에 사용되는 연산자
연산자 | 기능 | 연산 예 |
+ | 두 항을 더합니다 | 5+3 |
- | 앞에 있는 항에서 뒤에 있는 항을 뻅니다 | 5-3 |
* | 두 항을 곱합니다 | 5*3 |
/ | 앞에 있는 항에서 뒤에 있는 항을 나누어 몫을 구합니다 | 5/3 |
% | 앞에 있는 항에서 뒤에 있는 항을 나누어 나머지를 구합니다 | 5%3 |
- %는 나머지를 구하는 연산자
- 숫자 n의 나머지는 0~n-1 범위의 수
- 특정 범위 안의 수를 구할때 종종 사용
- 증가 감소 연산자
- 단항 연산자
- 1만큼 더하거나 1만큼 뺄 때 사용하는 연산자
- 항의 앞/뒤 위치에 따라 연산 결과가 달라짐 유의
연산자 | 기능 | 연산 예 |
++ | 항의 값에 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 operandAndOperator;
public class OperationEx3 {
public static void main(String[] args) {
int num = 10;
System.out.println(++num);// 결과=11
// 앞에 붙는 ++/--은 문장이 끝나기 전에 덧셈을 진행함
num = 10;
System.out.println(num++);// 결과=10
System.out.println(num);// 결과=11
// 뒤에 붙는 ++/-- 은 문장이 끝난 후에 덧셈을 진행함
}
}
- 관계연산자
- 이항 연산자
- 연산의 결과가 true(참),false(거짓)으로 반환 됨
연산자 | 기능 | 연산예 |
> | 왼쪽 항이 크면 참을, 아니면 거짓을 반환 | num>3; |
< | 왼쪽 항이 작으면 참, 아니면 거짓을 반환 | num<3; |
>= | 왼쪽 항이 오른쪽 항보다 크거나 같으면 참, 아니면 거짓을 반환 | num>=3; |
<= | 왼쪽 항이 오른쪽 항보다 작거나 같으면 참, 아니면 거짓을 반환 | num<=3; |
== | 두 개 항의 값이 같으면 참, 아니면 거짓을 반환 | num==3; |
!= | 두 개 항이 다르면 참, 아니면 거짓을 반환 | num!=3; |
package operandAndOperator;
public class OperationEx4 {
public static void main(String[] args) {
System.out.println(3>5);//결과:false
System.out.println(3<5);//결과:true
//관계연산자의 결과는 true나 false
int num1=10;
int num2=5;
boolean flag=(num1>num2);
System.out.println(flag);//결과 true
}
}
- 논리연산자
- 관계 연산자와 혼합하여 많이 사용됨
- 연산의 결과가 true(참),false(거짓)으로 반환 됨
연산자 | 기능 | 연산예 |
&& (논리 곱) |
두 항이 모두 참인 경우에만 결과 값이 참, 그렇지 않은 경우는 거짓 | booleanval=(5>3)&&(5>2); //결과:true |
|| (논리 합) |
두 항 중 하나의 항만 참이면 결과 값은 참, 두 항이 모두 거짓이면 결과 값은 거짓 | booleanval=(5>3)||(5<2);//결과:true |
! (부정) |
단항 연산자, 참인 경우는 거짓으로 바꾸고, 거짓인 경우는 참으로 바꿈 | booleanval=!(5>3);//결과:false |
- 단락회로 평가(Short circuit evaluation)
- 논리 곱(&&)은 두 항이 모두 true 일 때만 결과가 true
- 앞의 항이 false이면 뒤 항의 결과를 평가하지 않아도 false
- 논리 합(||)은 두 항이 모두 false 일 때만 결과가 false
- 앞의 항이 true이면 뒤 항의 결과를 평가하지 않아도 true
- 논리 곱(&&)은 두 항이 모두 true 일 때만 결과가 true
package operandAndOperator;
public class ShortCircuitEvaluation {
public static void main(String[] args) {
int num1 = 10;
int i = 2;
boolean value = ((num1 = num1 + 10) < 10) && ((i = i + 2) < 10);
System.out.println(value); // 결과: false
System.out.println(num1);// 결과: 20
System.out.println(i);// 결과:2
// 논리 곱에서 앞 항의 결과 값이 거짓이라 뒤의 항이 실행되지 않아
// i값이 4가 되지 않고 2 그대로임
int num2 = 10;
int i2 = 2;
boolean value2 = ((num2 = num2 + 10) > 10) && ((i2 = i2 + 2) > 10);
System.out.println(value2); // 결과: false
System.out.println(num1);// 결과: 20
System.out.println(i2);// 결과:4
// 이 경우는 앞이 참이라 뒤에 항이 실행 되었음
value = ((num1 = num1 + 10) > 10) || ((i = i + 2) < 10);
System.out.println(value); // 결과: true
System.out.println(num1);// 결과:30
System.out.println(i);// 결과:2
// 논리 합에서 앞 항의 결과 값이 참이 므로 뒤에 항은 실행되지 않아
// i값이 4가 되지 않고 2 그대로임
value2 = ((num2 = num2 + 10) < 10) || ((i = i + 2) < 10);
System.out.println(value2);// 결과:true
System.out.println(num2);// 결과:30
System.out.println(i2);// 결과:4
// 이 경우는 핲이 거짓이라 뒤에 항이 실행 되었음
}
}
- 복합 대입 연사자
- 대입 연산자와 다른 연산자를 함께 사용함
- 프로그램에서 자주 사용하는 연산자
연산자 | 기능 | 연산 예 |
+= | 두 항의 값을 더해서 왼쪽 항에 대입 | num+=2; num1=num1+2 와 같음 |
-= | 왼쪽 항에서 오른쪽 항을 빼서 그 값을 왼쪽 항에 대입 | num1-=2l num1=num1-2 와 같음 |
*= | 두 항의 값을 곱해서 왼쪽 항에 대입 | num1*=2; num1=num1*2와 같음 |
/= | 왼쪽 항에서 오른쪽 항으로 나누어 그 몫을 왼쪽 항에 대입 | num1/=2; num1=num1/2와 같음 |
%= | 왼쪽 항에서 오른쪽 항으로 나누어 그 나머지를 왼쪽 항에 대입 | num1%=2; num1=num1%2와 같음 |
package operandAndOperator;
public class OperationEx5 {
public static void main(String[] args) {
int num1=10;
System.out.println(num1+=1);//결과:11
System.out.println(num1%=10);//결과:1
num1-=1; //num1=num1-1
System.out.println(num1);//결과:0
}
}
- 조건연산자
- 삼항연산자
- 조건식의 결과가 true(참)인 경우와 false(거짓)인 경우에 따라 다른 식이나 결과가 수행됨
- 제어문 중 조건문을 간단히 표현할 때 사용할 수있음
연산자 | 기능 | 연산 예 |
조건식?결과1:결과2; | 조건식이 참이면 결과1, 조건식이 거짓이면 결과2를 선택 | int num=(5>3)?10:20;//결과:10 |
package operandAndOperator;
public class OperationEx6 {
public static void main(String[] args) {
int num = (5 > 3) ? 10 : 20;
System.out.println(num);// 결과:10
int num2 = (5 < 3) ? 10 : 20;
System.out.println(num2);// 결과:20
}
}
- 비트 연산자 (C언어에서는 종종쓰고 Java에서 많이 쓰지않지만 기본적으로 알아두자)
- 비트 연산자는 정수에만 사용할 수 있음
연산자 | 설명 | 예 |
~ | 비트의 반전(1의 보수) | a=~a; |
& | 비트 단위 AND(둘다 1이면 값은 1 아니면 0) | 1&1 1반환 그 외는 0 |
| | 비트 단위 OR(둘 중 하나라도 1이면 값이 1) | 0|0 0반환 그 외는 1 |
^ | 비트 단위 XOR | 두개의 비트가 서로 다른 경우에 1을 반환 |
<< | 왼쪽 shift | a<<2 변수 a를 2비트 만큼 왼쪽으로 이동 |
>> | 오른쪽 shift | a>>2 변수 a를 2비트 만큼 오른쪽으로 이동 |
>>> | 오른쪽 shift | >>와 동일한 연산 채워지는 비트가 부호와 상관없이 0임 |
package operandAndOperator;
public class OperationEx7 {
public static void main(String[] args) {
int num1 = 5;
int num2 = 10;
int result = num1 & num2;
System.out.println(result);// 결과=0
// 5는 비트로 표현하면 0000 ... 0000 0101
// 10은 비트로 표현하면 0000 ... 0000 1010
// 0과 1을 &연산했을때 0&0=0,0&1=0,1&0=0,1&1=1
// &연산으로 모둔 비트가 0이 됨 따라서 결과 = 0이 나옴
int result2 = num1 | num2;
System.out.println(result2); // 결과:15
// 5는 비트로 표현하면 0000 ... 0000 0101
// 10은 비트로 표현하면 0000 ... 0000 1010
// 0과 1을 |연산 하면 0|0=0,0|1=1,1|0=1,1|1=1
// | 연산으로 비트는 0000 ... 0000 1111 이됨 따라서 결과:15
int result3 = num1 ^ num2;
System.out.println(result3);// 결과:15
// 5는 비트로 표현하면 0000 ... 0000 0101
// 10은 비트로 표현하면 0000 ... 0000 1010
// 0과 1을 ^연산하면 0^0=0,0^1=1,1^0=1,1^1=0
// ^ 연산으로 비트는 0000 ... 0000 1111 이 됨 따라서 결과:15
int num3 = 5;
System.out.println(num3 << 1);// 결과:10
System.out.println(num3 << 2);// 결과:20
System.out.println(num3 << 3);// 결과:40
// <<연산자는 비트를 왼쪽으로 미는 것 따라서 미는 수 n만큼 2^n 를 곱하면 됨
System.out.println(num3 >> 1); // 결과:2
// 5 는 0000.... 0000 0101 인데 한번 오른쪽으로 밀리면 0000 .... 0000 0010 이 됨
// >>연산자는 n비트 이동하면 기존수에 2^n만큼 나누면 됨.
}
}
'Java > Doit!자바프로그래밍입문_개념정리' 카테고리의 다른 글
Java 입문 기초 정리_상속과 다형성 (0) | 2024.05.03 |
---|---|
Java 입문 기초 정리_ 배열과 ArrayList (0) | 2024.05.02 |
Java 입문 기초 정리_ 클래스와 객체 1 (0) | 2024.04.29 |
Java 입문 기초 정리용_제어흐름 이해하기 (0) | 2024.04.26 |
Java 입문 기초 정리용_변수와 자료형 (0) | 2024.04.24 |