기록

[코틀린/Kotlin] 비트연산 본문

[Study]/Kotlin

[코틀린/Kotlin] 비트연산

Dannnnnn 2022. 5. 11. 01:21
반응형

비트연산 하는 법을 알아보자.

 

비트연산은 정수형 변수를 2진법인 비트단위로 연산할 수 있는 기능이다.

 

실무에서 비트연산은 거의 계산에는 사용하지 않는다.

(2진법을 이용한 연산 최적화가 필요하다면 컴파일러의 기능을 사용하는 경우가 대부분이다.)

 

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

변수 하나에 여러개의 값을 담아 사용할 수 있는 것이다.

 

비트연산을 사용하는 부하도 무시할 수 없으므로 주로 플래그 값*을 처리하거나 네트워크 등에서 프로토콜의 데이터 양을 줄이기 위해 자주 사용된다.

(* 여러개의 상태값을 0과 1로 담는 방법)

 

코틀린은 아직까지 모든 정수형이 부호를 포함하므로 최상위 비트를 양수, 음수를 표시하는 부호 비트로 사용하기에 이 부분에는 데이터를 담지 않는 것이 좋다.

 

1. 비트를 밀어주는 bitwise shift operators

shl (shift left)

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

 

shr (shift right)

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

 

ushr (unsigned shift right)

부호비트를 포함하여 모든 비트를 우측으로 밀어주는 기능

 

2. 비트를 조작하는 bitwise operators

and : 원본과 비교 대상의 값을 비트 단위로 비교하여 비트가 둘다 1인 자리만 1로 반환한다.

or : 비트가 하나라도 1인 자리는 1로 반환한다.

xor : 두 값을 비교하여 비트가 같은 자리는 0, 다른 자리는 1을 반환한다.

 

inv() : 비트를 모두 반전한다.

 

비트 연산자들은 각각의 특성을 이용해 기능별로 사용된다.

 

3. bitwise operators의 용도

* and 연산자

비트를 확인하는 용도

원하는 위치에만 1을 넣어 비교하면 1인지 0인지 확인해볼 수 있다.

비트를 clear하는 용도

비트를 0으로 만들고 싶은 부분에만 0을 넣어 연산하면 1인 부분만 남는다.

 

* or 연산자

비트의 set 연산, 즉 비트 값을 1로 설정할 때 사용한다.

비트를 1로 만들고 싶은 부분에만 1을 넣어 연산하면 1인 부분만 set이 된다.

 

* xor 연산자

비교할 두 값이 비트별로 동일한지 확인할 때 사용한다.

 

fun main() {
    
    var bitData: Int = 0b10000
    
    //(하위)세번째 비트에 1을 set
    bitData = bitData or(1 shl 2)
    
    //* toString 파라미터로 진법변환을 할 수 있다.
    println(bitData.toString(2))
    
    //다섯번째 비트 값 확인하기
    var result = bitData and(1 shl 4)
    println(result.toString(2))
    
    //원래 값 복원
    println(result shr 4)
    
    //다섯번째 비트에 있는 1을 clear
    bitData = bitData and((1 shl 4).inv())
    println(bitData.toString(2))
    
    //bitData가 10100과 같은지 비트별로 확인
    println((bitData xor(0b10100)).toString(2))
    
}

 

비트연산은 아주 제한적인 경우에만 사용하지만 반드시 알아야 할 중요한 연산이므로 꼭 기억하자.

 

 

 

https://www.youtube.com/watch?v=q7GV68jKLVM&list=PLQdnHjXZyYadiw5aV3p6DwUdXV2bZuhlN&index=30

위 강의를 보면서 개인적으로 공부한 내용을 정리하였습니다.

반응형