연산
- 주어진 식(expression)을 계산하여 결과를 얻어내는 과정

연산자

1. 산술 연산
- 더하기: +
- 빼기: -
- 곱하기: *
- 나누기: /
- 나머지: %
※/와 % 응용
- 10의 자리와 1의 자리 분리
68/10 = 6 //몫
68%10 = 8 //나머지
- 홀수 판단
int r = n%2 //r이 1이면 n은 홀수, r이 0이면 짝수
2. 증감 연산
- 1을 증가 또는 감소시키는 연산
- 1 증가: ++
- 1 감소: --
※전위 연산자 vs 후위 연산자
- 전위 연산자: 연산자가 변수의 앞에 있음, 연산 후의 값 반환
- 후위 연산자: 연산자가 변수의 뒤에 있음, 연산 전의 값 반환


3. 대입 연산
- 연산자의 오른쪽 식의 결과를 왼쪽에 있는 변수에 대입
int a = 1, b = 3;
a = b; //b를 a에 대입하여 a=3
a += b; //a=a+b. a=6, b=3

4. 비교 연산
- 두 피연산자를 비교하여 true 또는 false의 논리 값을 내는 연산

5. 논리 연산
- 논리 값을 대상으로 AND, OR, XOR, NOT의 논리 연산을 하여 논리 값을 내는 연산

※비교 연산과 논리 연산의 복합 사례
(age >= 20) && (age < 30) //나이(int age)가 20대인 경우
(c >= 'A') && (c <= 'Z') //문자 (char c)가 대문자인 경우
(x >= 0) && (y >= 0) && (x <= 50) && (y <= 50) //(x, y)가 (0, 0)과 (50, 50)의 사각형 내에 있음
6. 조건 연산
- 3개의 피연산자로 구성
- 삼항(ternary) 연산자라고도 함
condition ? opr2 : opr3
- 조건문(condition)이 true이면 해당 식의 결과 값이 opr2, false이면 opr3이 됨
- opr2나 opr3은 식이 될 수도 있고 값이 될 수도 있음
//예시
int x = 5;
int y = 3;
int s = (x>y) ? 1: -1; //(x>y)가 true이므로 1이 s에 대입됨
7. 비트 연산
- 비트 논리 연산
- 비트 시프트 연산
- 비트: 2진수의 한 자리

- 비트 논리 연산: 피연산자의 각 비트들의 논리 연산(AND, OR, XOR, NOT)


- 비트 시프트 연산: 3개의 연산자를 사용하여 새로운 비트를 삽입하며 비트의 자리를 이동
- 피연산자로 byte, short, int, long, char 타입만 가능(float, double, boolean 불가)

- << 연산자: 각 비트를 왼쪽으로 이동(LSB에 항상 비트 0 삽입)
byte a = 5;
byte b = (byte)(a<<2); //a 값을 왼쪽으로 2비트 이동 -> b = 20
- >>> 연산자: 각 비트를 오른쪽으로 이동(MSB에 항상 비트 0 삽입)
byte a = 20;
byte b = (byte)(a>>>2); //a 값을 오른쪽으로 2비트 이동 -> b = 5
- >> 연산자: 오른쪽 시프트 연산자이지만 MSB에 시프트 이전의 최상위 비트가 그대로 삽입
byte a = 20;
byte b = (byte)(a>>2); //a 값을 오른쪽으로 2비트 이동 -> b = 5
byte c = (byte)0xfg; //(0xf8)₁₆ = (-8)₁₀
byte d = (byte)(c>>2); //c를 오른쪽으로 2비트 이동 -> d = 0xfe = (-2)₁₀

예제 2-5 초 단위의 정수를 입력받고 몇 시간, 몇 분, 몇 초인지 출력하는 프로그램 작성
예제 2-6 다음 코드의 실행 결과

예제 2-7 다음 코드의 실행 결과

예제 2-8 다음 코드의 실행 결과

예제 2-9 다음 코드의 실행 결과
