Bitové operace Kotlin a Bitshift (s příklady)

Kotlin poskytuje několik funkcí (ve formě infix) k provádění bitové a bitové operace. V tomto článku se naučíte provádět operace na bitové úrovni v Kotlin pomocí příkladů.

Bitové operátory a operátory posunu bitů se používají pouze na dvou integrálních typech ( Inta Long) k provádění operací na bitové úrovni.

K provedení těchto operací poskytuje Kotlin 7 funkcí pomocí infixové notace.

1. nebo

orFunkce porovnává odpovídajících bitů dvou hodnot. Pokud je některá z bitů 1, dává 1. Pokud ne, dává 0. Například,

 12 = 00001100 (v binárním formátu) 25 = 00011001 (v binárním formátu) bitový NEBO provoz 12 a 25 00001100 nebo 00011001 ________ 00011101 = 29 (v desítkovém formátu)

Příklad: Bitový nebo operace

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

Když spustíte program, výstup bude:

 29

2. a

andFunkce porovnává odpovídajících bitů dvou hodnot. Pokud jsou oba bity 1, vyhodnotí se na 1. Pokud je některý z bitů 0, vyhodnotí se na 0. Například,

 12 = 00001100 (v binární podobě) 25 = 00011001 (v binární podobě) Bitová operace 12 a 25 00001100 a 00011001 ________ 00001000 = 8 (v desítkové soustavě)

Příklad: Bitový tok a provoz

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

Když spustíte program, výstup bude:

 8

3. xor

xorFunkce porovnává odpovídajících bitů dvou hodnot. Jsou-li odpovídající bity odlišné, dává 1. Pokud jsou odpovídající bity stejné, dává 0. Například,

 12 = 00001100 (v binárním formátu) 25 = 00011001 (v binárním formátu) bitový NEBO provoz 12 a 25 00001100 xor 00011001 ________ 00010101 = 21 (v desítkové soustavě)

Příklad: Bitová operace xor

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

Když spustíte program, výstup bude:

 21

4. inv ()

Funkce inv () invertuje bitový vzor. Je to každých 0 až 1 a každých 1 až 0.

 35 = 00100011 (v binární podobě) Bitový doplněk Provoz 35 00100011 ________ 11011100 = 220 (v desítkové soustavě)

Příklad: Bitový doplněk

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

Když spustíte program, výstup bude:

 -36

Proč dostáváme výstup -36 místo 220?

Je to proto, že kompilátor zobrazuje 2 doplněk tohoto čísla; negativní zápis binárního čísla.

Pro jakékoli celé číslo n bude 2 doplněk n -(n+1).

 Doplněk Decimal Binary 2 --------- --------- ---------------------------- ----------- 0 00000000 - (11111111 + 1) = -00000000 = -0 (desítkově) 1 00000001 - (11111110 + 1) = -11111111 = = -256 (desetinně) 12 00001100 - (11110011 +1) = -11110100 = -244 (desítkově) 220 11011100 - (00100011 + 1) = -00100100 = -36 (desetinně) Poznámka: Přetečení je při výpočtu doplňku 2 ignorováno.

Bitový doplněk 35 je 220 (v desítkové soustavě). Doplněk 2 z 220 je -36. Proto je výstup -36 místo 220.

5. sl

Tyto shlfunkce posouvá vzorek bitů nalevo od určitého počtu určených bitů, a nulových bitů jsou posunuty do nízké pořadí poloh.

 212 (In binary: 11010100) 212 shl 1 evaluates to 424 (In binary: 110101000) 212 shl 0 evaluates to 212 (In binary: 11010100) 212 shl 4 evaluates to 3392 (In binary: 110101000000)

Example: Bitwise left shift

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

When you run the program, the output will be:

 424 212 3392

6. shr

The shr function shifts bit pattery to the right by certin number of specified bits.

 212 (In binary: 11010100) 212 shr 1 evaluates to 106 (In binary: 01101010) 212 shr 0 evaluates to 212 (In binary: 11010100) 212 shr 8 evaluates to 0 (In binary: 00000000)

If the number is a 2's complement signed number, the sign bit is shifted into the high-order positions.

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

When you run the program, the ouput will be:

 106 212 0

7. ushr

The ushr function shifts zero into the leftmost position.

Example: signed and unsigned Right Shift

 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) )

When you run the program, the output will be:

 2 2 -3 2147483645

Všimněte si, jak funkce podepsaného a nepodepsaného posunu doprava funguje odlišně pro doplněk 2.

Doplněk 2 2147483645je 3.

Zajímavé články...