테크과학! DiMo
개발 환경: 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
'Kotlin > 기본 문법' 카테고리의 다른 글
코틀린(Kotlin) trimMargin() (0) | 2020.12.28 |
---|---|
코틀린 강좌 #30[완] 코루틴을 통한 비동기 처리 (0) | 2020.12.24 |
코틀린 강좌 #28 변수의 고급 기술. 상수, lateinit, lazy (0) | 2020.12.24 |
코틀린 강좌 #27 컬렉션 함수, 두번째 이야기! (0) | 2020.12.24 |
코틀린 강좌 #26 컬렉션 함수, 첫번째 이야기! (0) | 2020.12.24 |