English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Kotlin은 비트와位移 연산을 수행하기 위한 여러 가지 함수(중위 형식)를 제공합니다. 이 글에서는 예제를 통해 Kotlin에서 비트 수준 연산을 배울 것입니다.
비트 연산자와位移 연산자를 사용하여 비트 수준 연산을 수행할 수 있는 두 가지 정수 타입(Int와 Long)에만 사용할 수 있습니다.
이러한 연산을 수행하기 위해 Kotlin은7중위 기호를 사용하는 함수.
or 함수는 두 값의 해당 비트를 비교합니다. 두 비트 중 하나라도1그럼1그렇지 않으면 0입니다. 예를 들어,
12 = 00001100 (이진) 25 = 00011001 = 00 12과25비트 비교 연산 00001100 or 00011001 의 비트 보수 연산 00011101 = 29 (10진수)
fun main(args: Array<String>) { val number1 = 12 val number2 = 25 예제: 비트 보수 result = number1 or number2 // result = number1.or(number2) result = number.inv() }
프로그램을 실행할 때, 출력은 다음과 같습니다:
29
and 함수는 두 값의 해당 비트를 비교합니다. 두 비트가 모두1그럼 계산 결과가1두 위치 중 하나라도 0이면, 계산 결과가 0입니다. 예를 들어,
12 = 00001100 (이진) 25 = 00011001 = 00 12과25의 비트 앤 연산 00001100 and 00011001 의 비트 보수 연산 00001000 = 8 (10진수)
fun main(args: Array<String>) { val number1 = 12 val number2 = 25 예제: 비트 보수 result = number1 and number2 // result = number1.and(number2) result = number.inv() }
프로그램을 실행할 때, 출력은 다음과 같습니다:
8
xor 함수는 두 값을 비교합니다. 해당 비트가 다르면1입니다. 해당 비트가 같으면 0입니다. 예를 들어,
12 = 00001100 (이진) 25 = 00011001 = 00 12과25의 비트 이이스 연산 00001100 xor 00011001 의 비트 보수 연산 00010101 = 21 (10진수)
fun main(args: Array<String>) { val number1 = 12 val number2 = 25 예제: 비트 보수 result = number1 xor number2 // result = number1.xor(number2) result = number.inv() }
프로그램을 실행할 때, 출력은 다음과 같습니다:
21
비트 비트를 1로 바꿉니다 1inv() 함수는 비트 비트를 1로 바꿉니다. 이는 각 1 그리고 각
35 로 0.100011 = 00 35(이진) 00100011 의 비트 보수 연산 1101110________ 220 =
fun main(args: Array<String>) { val number = 35 예제: 비트 보수 val result: Int result = number.inv() }
프로그램을 실행할 때, 출력은 다음과 같습니다:
-36
println(result) -36 그래서 우리는 출력을 원합니다 220로 표시했기 때문입니다
이는 컴파일러가 이 숫자의2의 보수. 이진수의 부호.
모든 정수 n에 대해, n의2의 보수는-(n + 1)
Decimal Binary 2's complement --------- --------- --------------------------------------- 0 00000000 -(11111111+1) = -00000000 = -0(decimal) 1 00000001 -(11111110+1) = -11111111 = -256(decimal) 12 00001100 -(11110011+1) = -11110100 = -244(decimal) 220 11011100 -(00100011+1) = -00100100 = -36(decimal) 주의: 계산 중 오버플로우는 무시됩니다 2's complement.
35의 비트 보수는220(10진수).220의2의 보충 코드는-36따라서, 출력은-36그 대신220.
shl 함수는 비트 패턴을 지정된 수의 비트로 왼쪽으로 이동하며, 0 비트가 낮은 위치로 이동합니다.
212 (이진: 11010100) 212 shl 1 evaluates to 424 (이진: 110101000) 212 shl 0 evaluates to 212 (이진: 11010100) 212 shl 4 evaluates to 3392 (이진: 110101000000)
fun main(args: Array<String>) { val number = 212 println(number shl 1) println(number shl 0) println(number shl 4) }
프로그램을 실행할 때, 출력은 다음과 같습니다:
424 212 3392
shr 함수는 비트 패턴을 오른쪽으로 지정된 위치로 이동합니다.
212 (이진: 11010100) 212 shr 1 계산됩니다 106 (이진: 01101010) 212 shr 0 계산은 212 (이진: 11010100) 212 shr 8 0으로 계산됩니다(이진: 00000000)
이 숫자가2의 보수 번호가 있으면, 플래그位移을 높은 위치로 이동합니다.
fun main(args: Array<String>) { val number = 212 println(number shr) 1) println(number shr 0) println(number shr) 8) }
당신이 프로그램을 실행할 때, 출력은 다음과 같습니다:
106 212 0
ushr 함수는 가장 왼쪽 위치에 0을 이동시킵니다。
fun main(args: Array<String>) { val number1 = 5 val number2 = -5 //부호 있는 우측 이동 println(number1 shr 1) //부호 없는 우측 이동 println(number1 ushr 1) //부호 있는 우측 이동 println(number2 shr 1) //부호 없는 우측 이동 println(number2 ushr 1) }
프로그램을 실행할 때, 출력은 다음과 같습니다:
2 2 -3 2147483645
주의하십시오,2의 보충 코드, 부호 있는 우측 이동 함수와 부호 없는 우측 이동 함수의 작동 방식은 다릅니다。
2147483645의2의 보충 코드는3。