2025-02-26
오늘 학습한 내용은 자바 연산자 및 버퍼 개념이다.
자바에서 연산자는 산술, 비교, 논리, 비트, 시프트 연산자 등으로 나뉘며,
이를 활용하여 다양한 계산 및 논리 연산을 수행할 수 있다.
또한, 버퍼(Buffer)는 데이터를 일시적으로 저장하는 공간으로,
입출력 성능을 최적화하고 속도 차이를 해결하는 역할을 한다.
Scanner.nextInt() 후 버퍼에 남은 \n 처리 필요
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
sc.nextLine(); // 버퍼 비우기
String str = sc.nextLine();
BufferedReader 활용 (더 빠른 입력)
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(br.readLine());
String str = br.readLine();
+, -, *, /, % int a = 10, b = 3;
System.out.println("a + b = " + (a + b)); // 13
System.out.println("a - b = " + (a - b)); // 7
System.out.println("a * b = " + (a * b)); // 30
System.out.println("a / b = " + (a / b)); // 3 (정수 나눗셈)
System.out.println("a % b = " + (a % b)); // 1 (나머지)
true) 또는 거짓(false) 반환 ==, !=, >, <, >=, <= int x = 5, y = 10;
System.out.println("x == y: " + (x == y)); // false
System.out.println("x != y: " + (x != y)); // true
System.out.println("x > y: " + (x > y)); // false
System.out.println("x < y: " + (x < y)); // true
&& (AND), || (OR), ! (NOT) boolean bool1 = true, bool2 = false;
System.out.println("bool1 && bool2: " + (bool1 && bool2)); // false
System.out.println("bool1 || bool2: " + (bool1 || bool2)); // true
System.out.println("!bool1: " + (!bool1)); // false
| 연산자 | 의미 | 예제 |
|---|---|---|
& (AND) | 둘 다 1이면 1 | num1 & num2 |
| ` | ` (OR) | 하나라도 1이면 1 |
^ (XOR) | 다르면 1, 같으면 0 | num1 ^ num2 |
~ (NOT) | 비트 반전 (1 ↔ 0) | ~num1 |
int num1 = 15; // 00001111
int num2 = 20; // 00010100
System.out.println("AND : " + (num1 & num2)); // 4
System.out.println("OR : " + (num1 | num2)); // 31
System.out.println("XOR : " + (num1 ^ num2)); // 27
System.out.println("NOT : " + (~num1)); // -16
✅ ~num1 연산이 -16이 되는 이유
~15 = -(15 + 1) = -16 (2의 보수 연산)| 연산자 | 설명 | 결과 |
|---|---|---|
<< (왼쪽 시프트) | num * 2^n | 15 << 3 → 120 |
>> (오른쪽 시프트) | num / 2^n (부호 유지) | 15 >> 3 → 1 |
>>> (논리적 오른쪽 시프트) | num / 2^n, 0으로 채움 | -15 >>> 3 → 536870910 |
✅ 예제
int num1 = 15;
System.out.println("15 << 3 : " + (num1 << 3)); // 120
System.out.println("15 >> 3 : " + (num1 >> 3)); // 1
System.out.println("-15 >> 3 : " + (-15 >> 3)); // -2
System.out.println("-15 >>> 3 : " + (-15 >>> 3)); // 536870910
✅ >>와 >>> 차이점
| 연산자 | 양수 (num = 15) | 음수 (num = -15) |
|--------|-----------------|-----------------|
| >> 3 | 00000001 (1) | 11111110 (-2) |
| >>> 3 | 00000001 (1) | 00011110 (536870910) |
이번 학습을 통해 연산자의 종류와 사용법을 다시 정리할 수 있었다.
특히 비트 연산자와 시프트 연산자는 실무에서 자주 사용하지 않지만,
이해하면 최적화된 연산 수행에 유용하다는 점을 알게 되었다.
또한, 버퍼 개념을 명확하게 정리하면서,
Scanner 사용 시 발생하는 버퍼 문제 해결 방법도 다시 복습할 수 있었다.
&, |, ^, ~): 이진수 연산 수행. <<, >>, >>>): 비트를 좌우 이동하여 곱셈/나눗셈 효과. Scanner 사용 시 버퍼 문제 발생 가능, BufferedReader로 해결 가능.