Kotlin bitovne i bitshift operacije (s primjerima)

Kotlin nudi nekoliko funkcija (u infiksnom obliku) za izvođenje bitovnih i bitshift operacija. U ovom ćete članku naučiti izvoditi radnje na razini bita u Kotlinu uz pomoć primjera.

Operatori bit-a i pomaka bita koriste se na samo dva integralna tipa ( Inti Long) za izvođenje operacija na razini bita.

Da bi izvršio ove operacije, Kotlin pruža 7 funkcija pomoću infiksne notacije.

1. ili

orFunkcija uspoređuje odgovarajuće dijelove dviju vrijednosti. Ako je bilo koji od bitova 1, daje 1. Ako nije, daje 0. Na primjer,

 12 = 00001100 (u binarnom) 25 = 00011001 (u binarnom) Bitno ILI rad 12 i 25 00001100 ili 00011001 ________ 00011101 = 29 (u decimalnom)

Primjer: bitni ili rad

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

Kada pokrenete program, izlaz će biti:

 29

2. i

andFunkcija uspoređuje odgovarajuće dijelove dviju vrijednosti. Ako su oba bita 1, procjenjuje se na 1. Ako je bilo koji od bitova 0, procjenjuje se na 0. Na primjer,

 12 = 00001100 (u binarnom) 25 = 00011001 (u binarnom) Bit rad 12 i 25 00001100 i 00011001 ________ 00001000 = 8 (u decimalnom)

Primjer: Bitni i rad

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

Kada pokrenete program, izlaz će biti:

 8

3. xor

xorFunkcija uspoređuje odgovarajuće dijelove dviju vrijednosti. Ako su odgovarajući bitovi različiti, daje 1. Ako su odgovarajući bitovi isti, daje 0. Na primjer,

 12 = 00001100 (u binarnom) 25 = 00011001 (u binarnom) Bitno ILI rad 12 i 25 00001100 xor 00011001 ________ 00010101 = 21 (u decimalnom)

Primjer: Bitovni xor rad

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

Kada pokrenete program, izlaz će biti:

 21

4. inv ()

Funkcija inv () invertira uzorak bitova. Izrađuje svaki 0 ​​do 1 i svaki 1 do 0.

 35 = 00100011 (u binarnom) Bitni komplement Rad od 35 00100011 ________ 11011100 = 220 (u decimalnom)

Primjer: Bitni dodatak

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

Kada pokrenete program, izlaz će biti:

 -36

Zašto dobivamo izlaz -36 umjesto 220?

To je zato što prevodilac pokazuje komplement broja 2 tog broja; negativan zapis binarnog broja.

Za bilo koji cjelobrojni n, 2 će nadopunjavati n -(n+1).

 Komplement decimale Binarni 2 --------- --------- ---------------------------- ----------- 0 00000000 - (11111111 + 1) = -00000000 = -0 (decimalno) 1 00000001 - (11111110 + 1) = -11111111 = -256 (decimalno) 12 00001100 - (11110011 +1) = -11110100 = -244 (decimalni) 220 11011100 - (00100011 + 1) = -00100100 = -36 (decimalni) Napomena: Preljev se zanemaruje tijekom izračunavanja komplementa 2.

Bitni dodatak od 35 je 220 (u decimalnom). Dodatak dvojke od 220 je -36. Dakle, izlaz je -36 umjesto 220.

5. shl

U shlfunkciji pomaci ugrizla za uzorak s lijeve strane određenog broja navedenih bitova, a nula bitovi su pomaknuo u niskim reda pozicije.

 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

Primijetite, kako potpisana i nepotpisana funkcija desnog pomaka drugačije funkcionira za komplement 2.

Dopuna dvojke 2147483645je 3.

Zanimljivi članci...