밤빵's 개발일지
[TIL]20241019 비트연산자 본문
코틀린은 기본적인 산술 연산자뿐만 아니라 비트 연산자도 자주 사용된다. 비트 연산자는 주로 성능 최적화나 하드웨어 제어, 데이터 처리에서 중요한 역할을 한다. 특히 코틀린에서는 비트 연산이 간단하게 표현되며, 코드를 통해 비트 수준에서 데이터를 다룰 수 있다.
▶비트 연산이란?
비트 연산은 데이터의 각 비트 단위로 수행되는 연산이다. 숫자를 이진수로 변환한 후, 각 비트 간에 논리적인 연산을 수행하는 것이다. 비트 연산은 보통 숫자를 빠르게 처리하거나, 하드웨어 제어 및 최적화를 위해 사용된다. 특히, 비트 연산은 낮은 레벨의 데이터를 다루는 작업에 매우 유용하다.
코틀린에서 제공하는 주요 비트 연산자는 다음과 같다:
- and: 두 비트가 모두 1일 때만 1을 반환한다.
- or: 두 비트 중 하나라도 1이면 1을 반환한다.
- xor: 두 비트가 서로 다를 때 1을 반환한다.
- shl: 왼쪽으로 비트를 이동시킨다(shift left).
- shr: 오른쪽으로 비트를 이동시킨다(shift right).
▶코틀린의 주요 비트 연산자 사용법
▷and 연산자
and 연산자는 두 숫자의 비트가 모두 1일 때만 1을 반환하는 연산이다. 이를 통해 두 값의 비트 간의 교집합을 찾을 수 있다.
val x = 6 // 110 (2진수)
val y = 4 // 100 (2진수)
val result = x and y
println(result) // 4 (100)
→ x와 y의 비트를 비교하여 and 연산을 수행한 결과가 100(2진수), 4가 된다. 각 비트의 교집합이 1인 부분만 남기 때문에 이 결과가 나온다.
▷or 연산자
or 연산자는 두 숫자 중 하나라도 1이면 1을 반환한다. 이는 두 값의 비트 간의 합집합을 구하는 연산이다.
val x = 6 // 110 (2진수)
val y = 4 // 100 (2진수)
val result = x or y
println(result) // 6 (110)
→ 이 예시에서 or 연산을 수행한 결과는 110(2진수)이며, 6이다. 이는 두 비트 중 하나라도 1인 비트가 있을 경우 1을 반환하기 때문이다.
▷xor 연산자
xor 연산자는 두 숫자의 비트가 서로 다를 때만 1을 반환한다. 이를 통해 두 값의 차이를 비트 수준에서 나타낼 수 있다.
val x = 6 // 110 (2진수)
val y = 4 // 100 (2진수)
val result = x xor y
println(result) // 2 (010)
→ xor 연산을 수행한 결과는 010(2진수), 2이다. 이는 두 비트가 서로 다른 부분만 1로 반환되었기 때문이다.
▷shl 연산자 (비트 왼쪽 이동)
shl 연산자는 비트를 왼쪽으로 이동시키는 연산이다. 이는 곧 숫자를 2의 거듭제곱으로 곱하는 효과를 가진다.
val x = 1 // 0001 (2진수)
val result = x shl 2
println(result) // 4 (0100)
→ 위 예시에서 shl 연산을 통해 1을 2칸 왼쪽으로 이동시키면 0100(2진수)가 되며, 4이다. 이는 곧 1 * 2^2 = 4와 같은 의미를 가진다.
▷shr 연산자 (비트 오른쪽 이동)
shr 연산자는 비트를 오른쪽으로 이동시키는 연산이다. 이는 숫자를 2로 나누는 효과를 가진다.
val x = 8 // 1000 (2진수)
val result = x shr 2
println(result) // 2 (0010)
→ 8을 2칸 오른쪽으로 이동시키면 0010(2진수)가 되며, 2이다. 이는 곧 8 / 2^2 = 2와 같은 의미를 가진다.
▶비트 연산 활용 예시
비트 연산은 주로 성능 최적화, 비트 플래그 사용, 하드웨어 제어 등에서 유용하게 쓰인다.
▷비트 플래그 사용 예시
비트 플래그는 여러 상태 값을 비트로 관리할 때 유용하다. 각 비트를 하나의 플래그로 보고, 특정 상태를 켜거나 끌 수 있다.
const val FLAG_READ = 0b0001 // 1
const val FLAG_WRITE = 0b0010 // 2
const val FLAG_EXECUTE = 0b0100 // 4
var permissions = FLAG_READ or FLAG_WRITE // 읽기와 쓰기 권한 설정
fun hasPermission(flag: Int): Boolean {
return (permissions and flag) == flag
}
println(hasPermission(FLAG_READ)) // true
println(hasPermission(FLAG_EXECUTE)) // false
→ 위 코드는 읽기, 쓰기, 실행 권한을 비트 플래그로 관리하는 예시로, or 연산을 통해 여러 권한을 조합하고, and 연산을 통해 특정 권한이 있는지 확인할 수 있다.
비트 연산자는 간단해 보이지만, 성능 최적화나 상태 관리 등에서 매우 중요한 역할을 한다. 특히, 대규모 데이터 처리나 하드웨어와의 통신에서 비트 연산을 잘 활용하면 더욱 효율적인 프로그램을 작성할 수 있다. 코틀린의 비트 연산자는 직관적이고, 성능적으로도 매우 빠르다.
'Kotlin' 카테고리의 다른 글
[TIL]20241021 문자열 자르기&합치기 (6) | 2024.10.21 |
---|---|
[TIL]20241020 Type Alias (1) | 2024.10.20 |
[TIL]20241018 const 와 val의 차이 (0) | 2024.10.19 |
[TIL]20241017 const (0) | 2024.10.17 |
[TIL]20241016 정규표현식(Regex) (0) | 2024.10.16 |