항
: 연산에 사용되는 피연산자연산자
: 항을 연산을 시키는 기호항의 개수에 따른 분류
단항
: 1개 항을 연산이항
: 2개 항을 연산삼항
: 3개 항을 연산기능에 따른 분류
=
+
-
*
/
%
++
--
+=
, -=
, ...<
, >
==
, !=
<=
, >=
&&
||
<<
>>
>>>
&
|
^
~
(조건식) ? "참일 때 return 값" : "거짓일 때 return 값"
위 연산자들을 하나하나 다 외운다는 느낌보다는 코드에 익숙해지고 실제로 사용하는 데에 집중하자.
자연스레 손에 익게 될 것이다.
2를 기준으로 수를 다루는 방식으로 컴퓨터에서 데이터를 다루는 방식이기도 하다.
보수를 계산하는 방법은 N진수에서 m 자리의 n 이라는 수가 있을 때,
N^(m+1) - n
의 값이 보수이다.
예를 들어,
3
의 보수는 10 - 3 = 7
이다.11
의 보수는 100 - 11 = 01
이다.참고로 컴퓨터에서 음수는 2의 보수와 같다.
컴퓨터에서 수를 표현하는 비트는 부호비트 | 001
과 같이 이뤄져있다.
예를 들어 4개의 비트만을 사용할 수 있는 컴퓨터가 있다고 해보자.
0001
은 숫자 1
을 나타낸다.0001
의 보수인 1111
은 숫자 -1
을 나타낸다.1 + (-1)
을 2진수로 나타내면 0001 + 1111 = 10000
인데 10000
에서 1
은 사용할 수 있는 비트를 초과하기 때문에, 사실상 0001 + 1111 = 0000
을 의미하고, 0000
은 0
이다.2진수의 보수를 쉽게 구하는 방법은 모든 자리의 수를 반전시킨 뒤에 +1 해주면 된다.
예를 들어,
1011
의 보수는 0100 + 0001 = 0101
이다.비트 연산자
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(5))); // 0101
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(3))); // 0011
/* & AND */
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(5 & 3))); // 0001
/* | OR */
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(5 | 3))); // 0111
/* ^ XOR */
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(5 ^ 3))); // 0110
/* ~ NOT */
System.out.printf("%s\n", Integer.toBinaryString(~5)); // 1010
비트 이동연산자
<<
곱하기 2^n
와 같은 결과를 가져온다.>>
나누기 2^n
와 같은 결과를 가져온다. >>>
>>
와 같이 모든 비트를 오른쪽으로 옮겨준다./* << left shift */
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(5))); // 0101
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(5 << 1))); // 1010
System.out.println(5 << 1); // 10
/* >> right shift */
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(5 >> 1))); // 0010
System.out.printf(5 >> 1); // 2
/* >>> right shift and assign 0 at MSB (Most Significant Bit) */
System.out.printf("%s\n", Integer.toBinaryString(-5 >> 1)); // 11111111111111111111111111111101
System.out.println(-5 >> 1); // -3
System.out.printf("%04d\n", Integer.parseInt(Integer.toBinaryString(-5 >>> 1))); // 01111111111111111111111111111101
System.out.println(-5 >>> 1); // 2147483645
연산자의 종류 에 대해 더 자세히 알고 싶다면, 링크로 들어가보자.