항 : 연산에 사용되는 피연산자연산자 : 항을 연산을 시키는 기호항의 개수에 따른 분류
단항 : 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
연산자의 종류 에 대해 더 자세히 알고 싶다면, 링크로 들어가보자.