자바 연산자 & 버퍼 개념 정리

My Pale Blue Dot·2025년 2월 26일

JAVA

목록 보기
4/35
post-thumbnail

📅 날짜

2025-02-26

📌 학습 내용

오늘 학습한 내용은 자바 연산자 및 버퍼 개념이다.
자바에서 연산자는 산술, 비교, 논리, 비트, 시프트 연산자 등으로 나뉘며,
이를 활용하여 다양한 계산 및 논리 연산을 수행할 수 있다.

또한, 버퍼(Buffer)데이터를 일시적으로 저장하는 공간으로,
입출력 성능을 최적화하고 속도 차이를 해결하는 역할을 한다.


🔹 1. 버퍼(Buffer) 개념

✅ 버퍼란?

  • 데이터를 일시적으로 저장하는 메모리 공간.
  • 입출력 속도 차이를 해결하고, 효율적으로 데이터를 처리하기 위해 사용됨.

✅ 입력 시 버퍼 문제 해결

  1. Scanner.nextInt()버퍼에 남은 \n 처리 필요

    Scanner sc = new Scanner(System.in);  
    int num = sc.nextInt();  
    sc.nextLine(); // 버퍼 비우기  
    String str = sc.nextLine();  
  2. BufferedReader 활용 (더 빠른 입력)

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
    int num = Integer.parseInt(br.readLine());  
    String str = br.readLine();  

🔹 2. 연산자 개념

✅ 산술 연산자 (Arithmetic Operators)

  • 사칙연산을 수행하는 연산자.
  • +, -, *, /, %
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 (나머지)  

✅ 비교 연산자 (Comparison Operators)

  • 두 값을 비교하여 참(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  

✅ 논리 연산자 (Logical Operators)

  • && (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  

🔹 3. 비트 연산자 (Bitwise Operators)

연산자의미예제
& (AND)둘 다 1이면 1num1 & num2
`` (OR)하나라도 1이면 1
^ (XOR)다르면 1, 같으면 0num1 ^ 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의 보수 연산)

🔹 4. 비트 시프트 연산 (Bitwise Shift Operators)

연산자설명결과
<< (왼쪽 시프트)num * 2^n15 << 3120
>> (오른쪽 시프트)num / 2^n (부호 유지)15 >> 31
>>> (논리적 오른쪽 시프트)num / 2^n, 0으로 채움-15 >>> 3536870910

예제

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로 해결 가능.

profile
Here, My Pale Blue.🌏

0개의 댓글