Котлин побитови и Bitshift операции (с примери)

Kotlin предоставя няколко функции (в инфиксна форма) за извършване на побитови и битови операции. В тази статия ще се научите да извършвате операция на битово ниво в Kotlin с помощта на примери.

Операторите на битови и битови смени се използват само за два интегрални типа ( Intи Long) за извършване на операции на битово ниво.

За да извърши тези операции, Kotlin предоставя 7 функции, използващи инфикс нотация.

1. или

На orфункцията сравнява съответните битове на две стойности. Ако някой от битовете е 1, той дава 1. Ако не, дава 0. Например,

 12 = 00001100 (в двоична) 25 = 00011001 (в двоична) Побитово ИЛИ Операция на 12 и 25 00001100 или 00011001 ________ 00011101 = 29 (в десетична)

Пример: Побитово или операция

 fun main(args: Array) ( val number1 = 12 val number2 = 25 val result: Int result = number1 or number2 // result = number1.or(number2) println(result) )

Когато стартирате програмата, изходът ще бъде:

 29

2. и

На andфункцията сравнява съответните битове на две стойности. Ако двата бита са 1, той се оценява на 1. Ако някой от битовете е 0, се оценява на 0. Например,

 12 = 00001100 (в двоична) 25 = 00011001 (в двоична) битова операция на 12 и 25 00001100 и 00011001 ________ 00001000 = 8 (в десетична)

Пример: Побитово и работа

 fun main(args: Array) ( val number1 = 12 val number2 = 25 val result: Int result = number1 and number2 // result = number1.and(number2) println(result) )

Когато стартирате програмата, изходът ще бъде:

 8

3. xor

На xorфункцията сравнява съответните битове на две стойности. Ако съответните битове са различни, дава 1. Ако съответните битове са еднакви, дава 0. Например,

 12 = 00001100 (в двоична) 25 = 00011001 (в двоична) Побитово ИЛИ Операция на 12 и 25 00001100 xor 00011001 ________ 00010101 = 21 (в десетична)

Пример: Побитова xor операция

 fun main(args: Array) ( val number1 = 12 val number2 = 25 val result: Int result = number1 xor number2 // result = number1.xor(number2) println(result) )

Когато стартирате програмата, изходът ще бъде:

 21.

4. inv ()

Функцията inv () обръща битовия модел. Прави всеки 0 до 1 и всеки 1 до 0.

 35 = 00100011 (в двоичен) Побитово допълнение Операция на 35 00100011 ________ 11011100 = 220 (в десетичен знак)

Пример: Побитово допълнение

 fun main(args: Array) ( val number = 35 val result: Int result = number.inv() println(result) )

Когато стартирате програмата, изходът ще бъде:

 -36

Защо получаваме изход -36 вместо 220?

Това е така, защото компилаторът показва допълнение 2 на това число; отрицателна нотация на двоичното число.

За всяко цяло число n, допълнението 2 на n ще бъде -(n+1).

 Десетично двоично допълнение 2 --------- --------- ---------------------------- ----------- 0 00000000 - (11111111 + 1) = -00000000 = -0 (десетична) 1 00000001 - (11111110 + 1) = -11111111 = -256 (десетична) 12 00001100 - (11110011 +1) = -11110100 = -244 (десетичен) 220 11011100 - (00100011 + 1) = -00100100 = -36 (десетичен) Забележка: Преливането се игнорира, докато се изчислява допълнението на 2.

Побитовото допълнение на 35 е 220 (в десетични знаци). Допълнението от 2 на 220 е -36. Следователно изходът е -36 вместо 220.

5. shl

На shlизмества функцията битов модел на ляво от определен брой конкретни бита и нула бита поставяни в позициите от нисък ред.

 212 (в двоично: 11010100) 212 shl 1 оценява на 424 (в двоично: 110101000) 212 shl 0 оценява на 212 (в двоично: 11010100) 212 shl 4 оценява на 3392 (в двоично: 110101000000)

Пример: Побитова лява смяна

 fun main(args: Array) ( val number = 212 println(number shl 1) println(number shl 0) println(number shl 4) )

Когато стартирате програмата, изходът ще бъде:

 424 212 3392

6. shr

На shrизмества функция ухапало pattery вдясно от certin брой конкретни бита.

 212 (в двоичен: 11010100) 212 shr 1 оценява на 106 (в двоичен: 01101010) 212 shr 0 оценява на 212 (в двоичен: 11010100) 212 shr 8 оценява на 0 (в двоичен: 00000000)

Ако числото е число с допълнение 2, подписано число, знаковият бит се премества в позиции от висок ред.

 fun main(args: Array) ( val number = 212 println(number shr 1) println(number shr 0) println(number shr 8) )

Когато стартирате програмата, изходът ще бъде:

 106 212 0

7. ushr

На ushrизмества функцията нула в най-лявата позиция.

Пример: подписана и неподписана дясна смяна

 fun main(args: Array) ( val number1 = 5 val number2 = -5 // Signed right shift println(number1 shr 1) // Unsigned right shift println(number1 ushr 1) // Signed right shift println(number2 shr 1) // Unsigned right shift println(number2 ushr 1) )

Когато стартирате програмата, изходът ще бъде:

 2 2 -3 2147483645

Забележете, как подписаната и неподписаната функция за дясна смяна работи по различен начин за комплемента на 2.

Допълнението на 2 на 2147483645е 3.

Интересни статии...