항이라는 것은 연산을 할때 사용되는 값이다.
단항연산자는 항이 한 개인 연산자를 의미한다.
num++
이항연산자는 항이 두 개인 연산자를 의미한다.
1 + 1
삼항연산자는 항이 세 개인 연산자를 의미한다.
int a = 100;
String result = (a == 100) ? "yes":"no";
System.out.println(result);
yes
대입연산자란 우측에 기재된 데이터를 좌측에 기재된 변수에 대입하는 것을 의미한다.
ex) +10, -10
부호 연산자란 부호를 나타내는 연산자를 의미한다.
ex) +10, -10
(+의 경우에는 생략이 가능하다.)
+,-,*,/는 각각 덧셈,뺄셈,곱셈,나눗셈을 의미한다.
%의 경우는 나머지연산(modula)를 의미하고, 이것은 나누고 난 뒤, 나머지를 반환하는 기호이다.
ex) 10 % 3 = 1
단순하게 값을 1만큼 늘리거나(++), 1만큼 감소시키는(--) 연산자이다.
num = 10;
System.out.println(num++);
System.out.println(num);
num = 10;
System.out.println(++num);
System.out.println(num);
10
11
11
11
++가 뒤에붙은 경우는, 먼저, 해당 라인을 처리하고, 그 뒤에 1을 증가시킨다는 의미이다.
따라서, 먼저 10이 출력되고, 그 뒤에 1이 추가되었다.
반대로 ++을 앞에써주면, 1을 먼저 증가시켜주고, 해당 라인을 처리하게 된다.
따라서, 먼저 11이 출력되고, 그 뒤에도 똑같이 11이 출력된다.
--의 경우도 마찬가지이다.
관계연산자란, 두 항의 값 자체를 비교하는 연산자이다. 결과 값은 비교한 결과를 토대로 참,거짓으로 출력된다.
ex) 10 > 9, 5 != 3
num = 10;
num2 = 11;
System.out.println(num > num2);
System.out.println(num != num2);
false
true
num은 num2보다 작으므로 false가 출력되고,
num과 num2는 다르므로 true가 출력되었다.
논리식에 의해서 참, 거짓을 판단하는 연산자이다.
결과에 따라서, true, false를 리턴한다.
&&은 and를,
||은 or를,
!은 not을 의미하는 연산자이다.
ex) (10 > 0) && (1 == 0) //false
ex) (10 > 0 ) || (1 == 0) //true
대입 연산자와 다른 연산자를 조합한 연산이다. 주로 대입연산자와 산술연산자를 조합하여 사용된다.
ex) num1 += num2
ex) num1 %= num2
비트 단위로 연산을 수행하는 연산자이다.
기본 논리연산자가, &&,||를 사용한다면, 비트연산자에서는 &,|로 표기한다.
두 개의 비트값이 모두 1인 경우에만 1을 리턴한다.
ex) 5 & 3 -> 1
(5는 0101(2)이고, 3은 0011(2)이므로 각 비트를 &연산한다면, 0001(2)가 되므로 1이다.)
둘 중 하나라도 1이라면, 1을 리턴한다.
ex) 5 | 3 -> 7
(5는 0101(2)이고, 3은 0011(2)이므로 각 비트를 |연산한다면, 0111(2)가 되므로 7이다.)
두 개의 비트값이 같으면0을 리턴, 다르면 1을 리턴한다.
ex) 5 ^ 3 -> 6
(5는 0101(2)이고, 3은 0011(2)이므로 각 비트를 ^연산한다면, 0001(2)가 되므로 6이다.)
비트 값이 0이면 1로 1이면 0으로 반전
ex) ~5 -> -6
(5는 0101(2)이고, 이것을 반전시키면 1010(2)이다. 이것을 2의 보수를 취하면 -6이 된다.)
비트를 이동시키는 연산자이다.
비트를 왼쪽으로 이동시키는 연산자이다. 2를 곱하는 효과를 가진다.
3<<1 -> 6
(3은 0011(2)이고, 이것을 죄측으로 1만큼 이동시켰으므로 0110(2)가 된다. 맨 마지막 숫자는 0으로 채운다.)
비트를 오른쪽으로 이동시키는 연산자이다. 2를 나누는 효과를 가진다.
3>>1 -> 1
(3은 0011(2)이고, 이것을 우측으로 1만큼 이동시켰으므로 0001(2)가 된다. 맨 처음 숫자는 기존의 항의 부호로 채운다.)
즉 >>연산자의 경우에는 부호비트를 유지한다.
비트를 오른쪽으로 이동시킨다. 다만, 이 경우에는 부호비트 상관없이 0으로 채운다.
즉 부호비트의 경우에는 부호비트를 유지하지 않는다.