코틀린 강좌 #29 비트연산

Kotlin/기본 문법 · 2020. 12. 24. 17:06

테크과학! DiMo

 

테크과학! DiMo

개발자가 얘기하는 생활 속 IT기술에 대한 과학! 여러분이 몰랐던, 혹은 정확히 알지 못했던 IT 테크놀러지를 파드립니다! 좋은 영상을 위한 채널 후원, 투네이션을 통해서 해주세요! 후원링크 htt

www.youtube.com

 

 

개발 환경: play.kotlinlang.org


비트 연산

 


정수형 변수를 10진법 대신 2진법으로 연산할 수 있는 기능


실무에서는 비트 연산을 계산에는 거의 사용하지 않으며(* 2진법을 이용한 연산 최적화가 필요하다면 컴파일러의 기능을

 

사용하는 경우가 대부분임) 

 

정수형의 값을 비트단위로 나누어 데이터를 좀 더 작은 단위로 담아 경제성을 높이기 위한 용도로 사용된다.

비트 연산을 사용하는 부하도 무시할 수 없으므로 주로 플래그 값(여러 개의 상태 값을 0과 1로 담는 방법)을 처리하거나

 

네트워크 등에서 프로토콜의 데이터 양을 줄이기 위해 사용된다.

참고로 코틀린은 모든 정수형이 부호를 포함하므로 최상위 비트를 '-' 인지 '+' 인지를 표시하는 부호 비트로 사용하기 때

 

문에 이 부분에는 데이터를 담지 않는 것이 좋다.

 

 


bitwise shift operators

 

shl(shift left)
부호 비트를 제외한 모든 비트를 좌측으로 밀어주는 기능 

shr(shift right)
부호 비트를 제외한 모든 비트를 우측으로 밀어주는 기능 

ushr(unsigned shift right)
부호 비트를 포함하여 모든 비트를 우측으로 밀어주는 기능 

 


bitwise operator

 

and
비트가 둘 다 1인 자리만 1로 반환
(1010 and 0110 => 결괏값 0010)

or
비트가 둘 중 하나라도 1인 자리는 1로 반환
(1010 or 0110 => 결과값 1110)

xor
비트가 같은 자리는 0, 다른 자리는 1로 반환
(1010 xor 0110 => 결과값 1100)

 

 


and연산자는 그 특성을 이용하여 두 가지 기능으로 사용

 

1. 비트를 확인하는 방법


원본  0110
      and
비교 값 0100
결괏값 0100

 

 


2. 비트를 clear 하는 방법


원본  0110


      and


비교 값 1100(ex] 하위 2개의 비트를 0으로 만들고 싶을 때)


결괏값 0100

 


or연산자는 반대로 비트의 set 연산, 즉 비트 값을 1로 설정하고 싶을 때 사용

 

원본   0110


비교 값 1100 (ex] 상위 2개의 비트를 1로 만들고 싶을 때)


결괏값 1110

 


xor연산자는 비교할 두 값이 비트 별로 동일한지 확인

 

원본   0110


비교 값 1100 (ex] 내가 원하는 값과 비트들이 똑같은지 확인)


결괏값 1010

 


inv()

 

비트를 모두 반전시키는 연산자

 

0->1, 1->0

 

 

fun main() {
    var bitData: Int = 0b10000
    
    bitData = bitData or(1 shl 2) // 0b10000 or 0b100
    println(bitData.toString(2)) // *정수형의 경우 toString의 파라미터로 진법 변환을 할 수 있음

	var result =bitData and (1 shl 4) // ob10100 and 0b10000
    println(result.toString(2))
    
    println(result shr 4)
    
    bitData = bitData and ((1 shl 4).inv())
    println(bitData.toString(2))
    
    println((bitData xor(0b10100)).toString(2))
}

Output:
10100
10000
1
100
10000