Bitové operácie Kotlin a Bitshift (s príkladmi)

Kotlin poskytuje niekoľko funkcií (vo forme infixu) na vykonávanie bitovej a bitovej operácie. V tomto článku sa naučíte vykonávať operácie na bitovej úrovni v Kotline pomocou príkladov.

Operátory bitového a bitového posunu sa na vykonávanie operácií na bitovej úrovni používajú iba na dvoch integrálnych typoch ( Inta Long).

Na vykonávanie týchto operácií poskytuje Kotlin 7 funkcií pomocou infixovej notácie.

1. alebo

orFunkcia porovnáva zodpovedajúcich bitov dvoch hodnôt. Ak je ktorákoľvek z bitov 1, dáva 1. Ak nie, dáva 0. Napríklad

 12 = 00001100 (binárne) 25 = 00011001 (binárne) bitové ALEBO prevádzka 12 a 25 00001100 alebo 00011001 ________ 00011101 = 29 (desatinné)

Príklad: Bitový tok alebo prevádzka

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

Po spustení programu bude výstup:

 29

2. a

andFunkcia porovnáva zodpovedajúcich bitov dvoch hodnôt. Ak sú obidva bity 1, vyhodnotí sa to 1. Ak je niektorý z bitov 0, vyhodnotí sa to 0. Napríklad

 12 = 00001100 (binárne) 25 = 00011001 (binárne) Bitová prevádzka 12 a 25 00001100 a 00011001 ________ 00001000 = 8 (desatinné)

Príklad: Bitový tok a prevádzka

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

Po spustení programu bude výstup:

 8

3. xor

xorFunkcia porovnáva zodpovedajúcich bitov dvoch hodnôt. Ak sú zodpovedajúce bity odlišné, dáva 1. Ak sú zodpovedajúce bity rovnaké, dáva 0. Napríklad

 12 = 00001100 (binárne) 25 = 00011001 (binárne) bitové ALEBO prevádzka 12 a 25 00001100 xor 00011001 ________ 00010101 = 21 (desatinné)

Príklad: Bitová operácia xor

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

Po spustení programu bude výstup:

 21

4. inv ()

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

 35 = 00100011 (v binárnom formáte) Bitový doplnok Prevádzka s hodnotou 35 00100011 ________ 11011100 = 220 (v desatinnom formáte)

Príklad: bitový doplnok

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

Po spustení programu bude výstup:

 -36

Prečo dostávame výstup -36 namiesto 220?

Je to preto, že kompilátor zobrazuje doplnok 2 tohto čísla; záporná notácia binárneho čísla.

Pre každé celé číslo n bude doplnkom 2 čísla n -(n+1).

 Doplnok Decimal Binary 2 --------- --------- ---------------------------- ----------- 0 00000000 - (11111111 + 1) = -00000000 = -0 (desatinné číslo) 1 00000001 - (11111110 + 1) = -11111111 = = -256 (desatinné miesto) 12 00001100 - (11110011 +1) = -11110100 = -244 (desatinné číslo) 220 11011100 - (00100011 + 1) = -00100100 = -36 (desatinné číslo) Poznámka: Pri výpočte doplnku 2 je ignorované pretečenie.

Bitový doplnok 35 je 220 (v desatinnej sústave). Doplnok 2 k číslu 220 je -36. Preto je výstup -36 namiesto 220.

5. šl

Tieto shlfunkcie posúva vzorka bitov naľavo od určitého počtu určených bitov, a nulových bitov sú posunuté do nízkej poradí polôh.

 212 (v binárnom formáte: 11010100) 212 shl 1 vyhodnotí na 424 (v binárnom formáte: 110101000) 212 shl 0 vyhodnotí na 212 (v binárnom formáte: 11010100) 212 shl 4 vyhodnotí na 3392 (v binárnom formáte: 110101000000)

Príklad: Bitový posun vľavo

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

Po spustení programu bude výstup:

 424 212 3392

6. zmenš

Tieto shrfunkcie posúva bit Patterm vpravo od Certina počtu stanovených bitov.

 212 (v binárnom vyjadrení: 11010100) 212 shr 1 vyhodnotí na 106 (v binárnom vyjadrení: 01101010) 212 shr 0 vyhodnotí na 212 (v binárnom vyjadrení: 11010100) 212 shr 8 vyhodnotí na hodnotu 0 (v binárnom vyjadrení: 00000000)

Ak je číslom podpísané číslo doplnku 2, znakový bit sa posunie do pozícií vyššieho rádu.

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

Keď spustíte program, výstup bude:

 106 212 0

7. ushr

Tieto ushrfunkcie sa posunie nulu do ľavej krajnej polohy.

Príklad: podpísaný a nepodpísaný pravý posun

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

Po spustení programu bude výstup:

 2 2 -3 2147483645

Všimnite si, ako podpisovaná a nepodpísaná funkcia pravého posunu funguje inak pre doplnok 2.

Dvojkou doplnku 2147483645je 3.

Zaujímavé články...