📌 연산자와 피연산자
- 연산자 : 주어진 식을 계산하여 결과를 얻어내는 과정을 연산이라고 하며,
연산을 수행하는 기호를 연산자(Operator)라고 한다 (ex) +,-,*,/
- 피연산자 : 연산의 작업 대상자를 뜻한다.(operand) (ex) 변수, 상수, 수식
// x 가 3일때 수식 x2 - 3x + 4의 값을 계산하라
// 프로그램에서 계산하기 위해서는 수식을 사용한다
int x, y
x = 3;
y = x * x - 3 * x + 4;
System.out.println(y);
📌 연산자의 종류
1. 대입연산자
- 대입연산자(=)는 왼쪽에 있는 변수에 오른쪽에 있는 수식 값을 계산해 대입함
- 왼쪽은 반드시 변수이여야 하고, 오른쪽은 어떠한 수식이라도 가능함
x = 9; // 상수 9를 변수 x에 대입함
2. 산술연산자
- 가장 많이 사용하는 연산자로 수식 계산에 사용된다.
- 사칙연산(+,-,*,/)은 일상생활에서 자주 사용하여 익숙하지만 주의할 몇가지가 있다.
- / 는 나눗셈으로서 x를 y로 나누는 것이다. 이는 모든 피연산자가 정수형일 경우에만 정수 나눗셈을 한다.
- % 는 나머지로서 x를 y로 나눌 때 나머지 값이다.
public class Arithmetic {
public static void main (String[] args){
int result;
double resultDouble;
result = 3 + 2;
System.out.println(result); // 5
result = 3 - 2;
System.out.println(result); // 1
result = 3 * 2;
System.out.println(result); // 6
result = 3 / 2;
System.out.println(result); // 1
resultDouble = 3.0 / 2.0;
System.out.println(result); // 1.5
result = 3 % 2;
System.out.println(result); // 1
}
}
<예시출처> POWER JAVA 책
3. 증감연산자
- ++기호나 --기호를 사용하여 변수의 값을 증가시키거나 감소시키는 연산자
- 피연산자의 앞이나 뒤에 올 수 있는데, 위치에 따라 의미가 달라짐.
- ++ : 증가 연산자
- -- : 감소 연산자
- if, for, while 과 같은 반복문에서 주로 많이 사용 되며 주로 정수형 변수에 사용됨
연산자 형식 | 의미 |
++x | x값을 1 증가 후 그 값을 사용 |
x++ | x 값을 먼저 사용 후 1 증가 |
--x | x 값을 1 감소 후 그 값을 사용 |
x-- | x 값을 먼저 사용 후 1 감소 |
public class Unary{
public static void main(String[] args){
int x = 1;
int y = 1;
int nextx = ++x; // x 의 값이 증가 후 사용 됨 , nextx는 2가 된다.
int nexty = y++; // y의 값이 사용된 후 증가 됨, nexty는 1이 된다.
}
}
<예시출처> POWER JAVA 책
4. 복합대입연산자
- += 처럼 대입연산자와 산술연산자를 합쳐놓은 연산자이다.
- x +=y 는 x=x+y 와 같다.
5. 관계연산자
- 관계연산자 (relation operator) 는 비교 연산자라고도 하며 두 개의 피연산자를 비교하는 데 사용된다.
- 수학시간에 배웠던 부등호를 생각하면 된다.
- 관계연산자의 결과는 true 혹은 false 값인 boolean 자료형으로 반환된다. 제어문에서 많이 사용되는 연산자다.
연산자 기호 | 의미 | 예시 |
== | 두개 항이 값이 같으면 참, 아니면 거짓 | num == 7; |
!= | 두개 항이 다르면 참, 아니면 거짓 | num != 7; |
> | 왼쪽 항이 크면 참, 아니면 거짓 | num > 7; |
< | 왼쪽 항이 작으면 참, 아니면 거짓 | num < 7; |
>= | 왼쪽이 오른쪽보다 크거나 같을시 참 | num >= 7; |
<= | 왼쪽이 오른쪽보다 작거나 같을시 참 | num <= 7; |
public class Comparison{
public static void main(String[] args){
int x = 3;
int y = 4;
System.out.println( x == y); // false
System.out.println( x != y); // true
System.out.println( x > y); // false
System.out.println( x < y); // true
System.out.println( x <= y); // true
}
}
<예시출처> POWER JAVA 책
6. 논리연산자
- 여러 개의 조건을 조합하여 참인지 거짓인지 따질 경우 사용한다.
- boolean형 값을 결과로 하는 조건식만을 허용한다.
- && 가 || 보다 우선순위가 높기때문에 함께 사용될 때는 괄호를 사용해서 우선순위 명확히 해준다.
연산자 기호 | 사용 예시 | 의미 |
&& (AND연산자) | x && y | x,y 모두 참일 경우 참 |
||(OR연산자) | x || y | x,y 중 하나만 참이면 참 |
!(NOT연산자) | !x | x가 참이면 거짓, x가 거짓이면 참 |
public class Logical {
public static void main(String[] args){
int x =3;
int y =4;
System.out.println( x == 3 ) && ( y == 8 ); // false
System.out.println( x == 3) || (y == 8); // true
}
}
<예시출처> POWER JAVA 책
7. 비트연산자
- 비트연산은 2진수형태의 숫자 0과 1로 할 수 있는 연산이다.
- 자바에서는 기본적으로 비트연산자가 7가지가 있다.
- 비트연산자를 잘 활용하면 다양한 알고리즘 방법으로 작성 가능하고 복잡도를 줄여주는 역할을 한다
연산자 | 의미 |
~ ( NOT 연산) | 비트를 1이면 0으로, 0이면 1로 반전시킴 보수를 사용할 경우 32자리를 기준으로 값을 반환한다. |
& ( AND 연산) | 기본 AND 연산자처럼 해당 자리수에서 둘다 1인 경우 1을 반환하고 나머지는 0을 반환한다. ex) 1111 & 1000 = 1000 |
^ ( XOR 연산) | x ^ y 형태를 사용하고 해당 자리수에서 서로 다른 경우 1을 반환하고 같은 경우 0을 반환한다. ex) 1111 & 1000 = 111 |
| ( OR 연산) | 기본 OR 연산자처럼 해당 자리수에서 하나라도 1인 경우 1을 반환하고 둘다 0인 경우 0을 반환한다. ex) 1111 & 1000 = 1111 |
<< (비트 왼쪽 이동) | 숫자의 모든 비트를 왼쪽으로 이동시키고 오른쪽에 생기는 빈 비트 자리에는 0으로 채운다. x의 비트를 왼쪽으로 y칸 이동시킨다 ex) 1111 << 2 = 111100 |
>> (비트 오른쪽 이동) | 숫자의 모든 비트를 오른쪽으로 이동시킨다. 가장 우측에 있는 숫자가 밀려나가면 그냥 없어진다. x의 비트를 오른쪽으로 y칸 이동시킨다 ex) 1111 >> 2 = 11 |
>>> (비트 오른쪽 이동 unsigned) | 왼쪽 비트가 부호비트로 채워지지 않고 0으로 채워진다. |
📌 연산자의 우선 순위 & 결합 규칙
연산자 우선순위
- 산술 연산식에서는 덧셈, 뺄셈 보다 곱셈, 나눗셈 연산자가 우선 처리된다.
- 단항, 이항, 삼항 연산자 순으로 우선순위를 갖는다.
- 산술, 비교, 논리, 대입 연산자 순으로 우선순위를 갖는다.
- 단항과 대입 연산자를 제외한 모든 연산 방향은 왼쪽에서 오른쪽이다.
- 복잡한 연산식에는 ( ) 괄호를 사용하여 우선순위를 먼저 정해준다.
- 최우선연산자 ( ., [], () )
- 단항연산자 ( ++,--,!,~,+/- : 부정, bit변환>부호>증감)
- 산술연산자 ( *,/,%,+,-,shift) < 시프트연산자 ( >>,<<,>>> ) >
- 비교연산자 ( >,<,>=,<=,==,!= )
- 비트연산자 ( &,|,,~ )
- 논리연산자 (&& , || , !)
- 삼항연산자 (조건식) ? :
- 대입연산자 =,*=,/=,%=,+=,-=
● 정리 ●
1. 기본적으로 연산자에는 우선순위가 있다.
2. 우선순위 중 괄호()가 제일 높고, 산술 > 비교 > 논리 > 대입의 순서이며, 단항 > 이항 > 삼항의 순서다.
3. 연산자의 연산 진행방향은 왼쪽에서 오른쪽으로 진행된다.
4. 다만, 예외적으로 단항 연산자와 대입 연산자의 경우에는 오른쪽에서 왼쪽으로 진행된다.
'JAVA > JAVA기초' 카테고리의 다른 글
[JAVA기초] while문 (0) | 2022.01.20 |
---|---|
[JAVA기초] Switch문 (0) | 2022.01.18 |
[JAVA기초] 형변환(Casting) (0) | 2021.11.03 |
[JAVA기초] 변수(variable) - 변수의 기본 , 기본형 변수 (0) | 2021.10.31 |
[JAVA기초] println vs print 의 차이 (0) | 2021.10.30 |