티스토리 뷰

IT/Java

비트 연산자

오예봉봉 2020. 4. 20. 00:25


비트 연산자는 피 연산자를 0과1로 구성된 bit 단위로 연산합니다. 따라서 0과1로 나타낼 수 있는 정수 타입의 피 연산자만 비트 연산이 가능합니다. float , double과 같은 실수 타입은 0과 1로 표현할 수 없기 때문에 비트 연산이 불가능합니다.
비트 연산자는 기능을 기준으로 분류됩니다. 논리적 기능을 하는 비트 논리 연산자(& , | ,^, ~) 와 bit를 이동 시키는 비트 이동 연산자(<<,>>,>>>)가 있습니다. 
일반적인 논리 연산자는 true , false 를 가지고 논리적인 결과 값을 산출합니다. 그러나 비트 논리 연산자는 0과 1을 가지고 연산합니다. 


비트 논리 연산자

이 연산자에는 논리곱(&) , 논리합( | ) , 배타적 논리합(^) , 비트 반전(~)이 있습니다. 비트 반전 연산자는 단항 연산자에서  언급한 적이 있습니다. 링크를 참조 하시면 됩니다. 
논리곱 , 논리합 , 배타적 논리합의 경우에 피 연산자 타입이 정수면 비트 논리 연산자로 , boolean 타입이면 일반적인 논리 연산자로 기능합니다.

비트 논리곱(AND) 연산자

비트 두 개가 모두 1일 경우에만 연산 결과가 1이 나옵니다.
그 이외의 경우는 모두 0이 산출됩니다.

 연산식 

 연산 결과

 1 & 1

 1

 1 & 0

 0

 0 & 1

 0

 0 & 0

 0


비트 논리합(OR) 연산자

비트 두 개 중 하나만 1이면 연산 결과는 1이 산출 됩니다. 
즉 두 비트 모두 0일 경우에만 0이 나옵니다.

연산식 

 연산 결과

 1 | 1

 1

 1 | 0

 1

 0 | 1

 1

 0 | 0

 0



비트 배타적 논리합(XOR) 연산자

두 비트가 서로 다를 때만 1이 나옵니다. 
즉 한 개의 비트는 1이고 다른 한 개의 비트는 0일 때 1이 산출 됩니다. 

연산식  

 연산 결과

 1 ^ 1

 0

 1 ^ 0

 1

 0 ^ 1

 1

 0 ^ 0

 0



비트 반전(~) 연산자

1을 0으로 , 0을 1로 반전 시켜줍니다.(보수)

주의 사항

비트 연산자는 피 연산자를 int 자료형으로 자동 변환 시킨 후에 연산을 합니다.
따라서 , 피 연산자가 byte , short , char 타입이라면 그 연산 결과는 int 가 됩니다.
다음 예제를 봅시다.

byte a = 45 ;
byte b = 25 ;
byte result = a & b ;

위 코드는 컴파일 에러가 발생합니다. 왜냐하면 int로 자동 타입 변환이 발생하였으나 byte 로 연산 결과를 받고 있기 때문입니다. 따라서 , 아래와 같이 수정해야 합니다.

byte a = 45 ;
byte b = 25 ;
int result = a & b ;

비트 이동 연산자 (<< , >> , >>>)

shift( 비트 이동 연산자)는 정수 타입 피 연산자의 비트를 왼쪽 또는 오른쪽으로 이동 시키는 연산자입니다.

연산식 

 연산 결과

 i << j

i의 각 비트를 좌측으로 j 만큼 이동 시킵니다. 

이동으로 인하여 빈 자리는 0 으로 채웁니다.

 i >> j

i의 각 비트를 우측으로 j 만큼 이동 시킵니다.

이동으로 인하여 빈자리는 i의 최상위 부호 비트

와 동일한 값으로 채웁니다.

 i >>> j

 i의 각 비트를 우측으로 j만큼 이동 시킵니다.

이동으로 인한 빈자리는 0으로 채웁니다.


간단한 예제를 봅시다. (괄호 안은 2진수 입니다.)
3(0011) << 1 
위 연산의 결과는 6(0110)입니다.
3(0011) << 2
위 연산의 결과는 12(1100)입니다.
3(0011) >> 1
위 연산의 결과는 1(0001)입니다.


'IT > Java' 카테고리의 다른 글

삼항 연산자(조건 연산자)  (0) 2020.04.21
대입 연산자  (0) 2020.04.20
논리 연산자  (0) 2020.04.18
비교 연산자  (0) 2020.04.16
문자열 결합 연산자  (0) 2020.04.15