CS

비트연산자

Geisha 2024. 9. 3. 12:57

이미지 출처 :https://velog.io/@foeverna/Java-%EC%97%B0%EC%82%B0%EC%9E%90-%EA%B4%80%EA%B3%84-%EB%85%BC%EB%A6%AC-%EC%A1%B0%EA%B1%B4-%EB%B9%84%ED%8A%B8-%EC%97%B0%EC%82%B0%EC%9E%90


위의 이미지로 모든 설명이 다 되긴한다.

과거 디지털 공학 수업을 청강 하였을 때 공부한 적이 있었다. 회로에 관한 개념이었는데 Software에서 보다니 새삼 감회가 새로웠다. 

AND 연산자 (&)

  • 두 비트가 모두 1일 때만 1을 반환한다.
  • 예: 5 & 3 → 1

OR 연산자 (|)

  • 두 비트 중 하나라도 1이면 1을 반환한다.
  • 예: 5 | 3 → 7

XOR 연산자 (^)

  • 두 비트가 서로 다를 때 1을 반환한다.
  • 예: 5 ^ 3 → 6

NOT 연산자 (~)

  • 단항 연산자로, 비트를 반전시킨다. 1을 0으로, 0을 1로 만든다.
  • 예: ~5 → -6 (2의 보수 표기법으로 인해 반전된 결과가 음수로 나온다.)

왼쪽 시프트 연산자 (<<)

  • 비트를 왼쪽으로 이동시키며, 오른쪽 빈 공간에 0을 채운다. 이동할 때마다 값이 2배가 된다.
  • 예: 5 << 1 → 10 (2진수로 0101 → 1010)

오른쪽 시프트 연산자 (>>)

  • 비트를 오른쪽으로 이동시키며, 왼쪽 빈 공간은 부호 비트(가장 왼쪽 비트)로 채운다. 음수인 경우에는 1, 양수인 경우에는 0으로 채운다.
  • 예: 5 >> 1 → 2 (2진수로 0101 → 0010)
  • 음수 예: -5 >> 1 → -3

부호 없는 오른쪽 시프트 연산자 (>>>)

  • 비트를 오른쪽으로 이동시키며, 빈 공간은 항상 0으로 채웁니다. 부호와 상관없이 모든 비트가 오른쪽으로 이동
  • 예: 5 >>> 1 → 2
  • 예: -5 >>> 1 → 큰 양수 값이 나옴 (음수의 이진수를 0으로 채우기 때문에)

요약

  • AND (&): 둘 다 1일 때만 1
  • OR (|): 둘 중 하나라도 1이면 1
  • XOR (^): 다를 때 1
  • NOT (~): 비트 반전
  • 왼쪽 시프트 (<<): 비트를 왼쪽으로 이동, 값이 2배씩 증가
  • 오른쪽 시프트 (>>): 부호를 유지하면서 비트를 오른쪽으로 이동
  • 부호 없는 오른쪽 시프트 (>>>): 항상 0을 채우며 비트를 오른쪽으로 이동