10_비트 연산자

Jiyoon.lee·2023년 11월 18일
0

Java_inflearn

목록 보기
10/25

1. 비트(bit)와 바이트(byte)

  • 비트는 컴퓨터가 처리하는 정보의 최소 단위인데, 한 개만으로는 많은 양의 데이터를 나타내기에 턱없이 부족하기 때문에 정보를 표현하는 기본 단위로는 8개의 비트를 묶은 바이트(Byte)를 사용한다.
  • 1byte는 00000000부터 11111111까지 값을 표현할 수 있다.
  • 1byte는 정수로 표현하면 0부터 254까지 표현 가능하다.
  • 1byte를 16진수로 표현하면 00부터 FF까지 표현 가능하다. 4비트는 0부터 15까지 표현 가능하기 때문이다.

2. 비트 연산자는 논리 연산자와 비슷하지만, 비트(bit) 단위로 논리 연산을 할 때 사용하는 연산자이다.

  • 비트 연산자의 종류로는 &, |, ^, ~, <<, >>, >>>이 있다.
  • &는 and, |는 or, ^는 xor, ~는 not을 의미한다.
  • <<는 좌측 시프트(shift), >>는 우측 시프트(shift), >>>는 우측 양수화 시프트라고 한다.
  • &, |, ^는 논리 연산자로도 사용된다.

3. and, or, xor, not 비트 연산 결과

  • A = 1, B = 1일 때:
    A & B는 1, (대응되는 비트가 1로 같으면 1)
    A | B는 1, (대응되는 비트 중에서 하나라도 1이면 1)
    A ^ B는 0, (대응되는 비트가 서로 다르면 1)
    A ~ B는 0 (비트를 반전)

  • A = 1, B = 0일 때:
    A & B는 0,
    A | B는 1,
    A ^ B는 1,
    A ~ B는 1

  • A = 0, B = 1일 때:
    A & B는 0,
    A | B는 1,
    A ^ B는 1,
    A ~ B는 1

  • A = 0, B = 0일 때:
    A & B는 0,
    A | B는 0,
    A ^ B는 0,
    A ~ B는 1

4. 비트 연산자는 바이트를 구성하고 있는 bit를 연산하는 연산자이다.

  00000000
& 11111111
------------
  00000000
  • 두 개의 바이트에 각각 00000000과 11111111이 저장되어 있을 때 2개의 바이트에 대한 and(&)연산의 결과는 각각의 자리수에 해당하는 비트끼리 and연산을 한 결과가 구해진다.

5. >>와 <<

  • "<<"는 명시된 수만큼 비트들을 전부 왼쪽으로 이동시킨다.
  • ">>"는 부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킨다.

*정수형 타입을 비트로 표현했을 때, 맨 좌측의 비트를 부호화 비트라고 함. 맨 좌측의 비트가 1이면 음수, 0이면 양수를 나타냄

6. 예제 : shift 연산자

public class BitOperatorExam {
    public static void main(String[] args) {
        int a = 4;
        int b = a >> 1;
        System.out.println(b);

        int c = 4;
        int d = c << 1;
        System.out.println(d);
    }
}
  • 실행 결과 :
2
8

7. >>>는 지정한 수만큼 비트를 전부 오른쪽으로 이동시키며, 새로운 비트는 전부 0이 된다.

  • ">>>"는 그 결과 무조건 양수가 나온다.
  • 10000000 >>> 2를 하게 되면, 00100000가 된다.
  • 10000000는 음수, 00100000은 양수이다.

0개의 댓글