1 분 소요

비트 단위로 연산을 진행하는 비트 연산자들을 공부하겠습니다.

1. 비트 연산자란

비트 연산자는 비트 단위로 연산을 진행하는 연산자이며, 피연산자는 반드시 정수여야 합니다.
(실수에 대한 비트 연산은 불가능합니다.)

비트 연산자의 종류로는

  1. & : 비트 단위로 AND 연산을 한다.
  2. | : 비트 단위로 OR 연산을 한다.
  3. ^ : 비트 단위로 XOR 연산을 한다.
  4. ~ : 피연산자의 모든 비트를 반전시켜서 얻은 결과를 반환한다.

비트 연산의 경우 동일한 위치에 있는 비트들끼리 연산을 진행합니다.

2. 비트 연산자 &, |, ^, ~

우선 &연산자에 대해 알아보겠습니다.
& 연산자는 비교의 대상이 되는 두 비트가 모두 1인 경우에만 1을 반환합니다.

| 연산자는 비교의 대상이 되는 두 비트중 하나가 1인 경우 1을 반환합니다.

^ 연산자는 비교의 대상이 되는 두 비트가 서로 다른 경우 1을 반환합니다. (0,1 1,0)

~ 연산자는 모든 비트를 반전시킵니다.

3. 비트 쉬프트(shift) 연산자(«, », »>)

비트 쉬프트 연산자는 피연산자의 비트 열을 왼쪽 또는 오른쪽으로 이동시키는 연산자입니다.

종류로는,

  1. << 연산자 : 피연산자의 비트 열을 왼쪽으로 이동, 이동에 따른 빈 공간은 0으로 채움
  2. >> 연산자 : 피연산자의 비트 열을 오른쪽으로 이동, 이동에 따른 빈 공간은 음수의 경우 1, 양수의 경우 0으로 채움
  3. >>> 연산자 : 피연산자의 비트 열을 오른쪽으로 이동, 이동에 따른 빈 공간을 0으로 채움

예시를 보겠습니다.

System.out.println(2<<1); //4
System.out.println(2<<2); //8

System.out.println(8>>1); //4
System.out.println(8>>2); //2

System.out.println(-8>>1); //-4
System.out.println(-8>>2); //-2

System.out.println(-8>>>3); //2147483644

쉽게 이해하려면 왼쪽으로의 비트열 이동은 2의 배수 곱으로 이루어집니다.
오른쪽으로의 비트열 이동은 2의 배수의 나눗셈으로 이루어집니다.
그러나 »>의 경우 이동의 따른 빈 공간을 무조건 0으로 채우기 때문에 2의 배수와는 전혀 상관없는 값이 만들어집니다.

태그:

카테고리:

업데이트:

댓글남기기