항을 기준으로 나누었을때 단항, 이항, 삼항 연산가자 있음.
우선순위는 단항 연산자가 높으며, 반대로 대입 연산자의 우선순위는 낮은 편.
연산에 사용되는 값
항을 이용하여 연산하는 기호
=
연산자를 통해 변수에 다른 값을 대입하는 연산자.변수 = 값
의 형태로 사용. 우변의 값이 좌변의 변수에 대입됨.int num = 10;
system.out.println(-num);
이때 변수 num
의 값은 바뀌지 않으나, 위처럼 출력 시 부호는 반대로 출력된다.
+
더하기
-
빼기
*
곱하기
/
나누기
%
나눈 나머지를 구함
대입 연산자가 다른 연산자와 같이 쓰임
+=
A = A+B
-=
A = A-B
단항 연산자.
연산자가 항의 앞에 있을때와 뒤에 있을때에 따라 연산시점과 연산결과가 다르니 주의.
매우 자주 사용되니 알아둘 것.
++
A = A + 1
--
A = A - 1
항의 앞에 쓰면 현재 statements가 실행되기 전 증감이 이뤄지며, 뒤에 쓰면 실행된 후 증감이 이루어진다.
public class OperatorTest {
public static void main(String[] args) {
int gameScore = 150;
int lastScore = ++gameScore; // gameScore += 1 와 같은 의미
System.out.println(lastScore);
System.out.println(gameScore);
}
}
이항 연산자.
두 항의 관계에 대해 연산하는 연산자.
주로 결과가 true, false로 반환됨.
조건문과 반복문의 조건식으로 자주 사용됨.
<
>
<=
>=
==
!=
&&
(AND) 양쪽 모두 true여야 true를 반환
||
(OR) 양쪽 중 하나라도 true이면 true를 반환
!
(NOT) true는 false, false는 true를 반환
public class LogicalTest {
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);
System.out.println(num1);
System.out.println(i);
value = ((num1 = num1 + 10 ) < 10) || ( ( i = i + 2 ) < 10);
System.out.println(value);
System.out.println(num1);
System.out.println(i);
}
}
public class ConitionTest {
public static void main(String[] args) {
int max;
System.out.println("두 수를 입력받아 더 큰 수를 출력합니다.\n");
Scanner scanner = new Scanner(System.in); // 콘솔에서 입력받기 위해 scanner객체 생성
System.out.println("입력 1 :");
int num1 = scanner.nextInt();
System.out.println("입력 2 :");
int num2 = scanner.nextInt();
max = (num1 > num2)? num1 : num2;
System.out.println(max);
}
}
~
비트의 반전
&
비트단위 and
|
비트단위 or
^
비트단위 xor. 두 비트가 서로 다른 경우 1을 반환.
<<
왼쪽 shift.
>>
오른쪽 shift.
>>>
오른쪽 shift. 채워지는 비트의 부호와 관계없이 0이 됨.
왼쪽 shift는 숫자 x 2의 n제곱에서 n이 +1되며, 우측shift는 n이 +1되는 연산임.
주의점.
비트 연산만으로는 대상의 값이 변경되지 않음.
값을 변경하기 위해서는 반드시 대입연산자와 함께 사용하여야 함.
public class BitOperationTest {
public static void main(String[] args) {
int num1 = 5;
int num2 = 5;
System.out.println( num1 | num2 );
System.out.println( num1 & num2 );
System.out.println( num1 ^ num2 );
System.out.println( ~num1 );
System.out.println();
System.out.println( num1 << 2);
System.out.println( num1 );
System.out.println( num1 <<= 2);
System.out.println( num1 );
System.out.println( num1 >> 1 );
}
}
참고로 알아둘 것.
단, 괄호를 이용하여 우선순위를 모르더라도 한눈에 파악할 수 있는 가독성 좋은 코드로 작성하는것을 권장.