Kotlin Bitwise un Bitshift operācijas (ar piemēriem)

Kotlin nodrošina vairākas funkcijas (infix formā), lai veiktu operāciju bitu un bitu maiņas režīmā. Šajā rakstā jūs uzzināsiet veikt bitu līmeņa darbību Kotlīnā, izmantojot piemērus.

Bitu līmeņa un bitu nobīdes operatori tiek izmantoti tikai diviem neatņemamiem tipiem ( Intun Long), lai veiktu bitu līmeņa darbības.

Lai veiktu šīs darbības, Kotlins nodrošina 7 funkcijas, izmantojot infix apzīmējumus.

1. vai

orFunkcija salīdzina atbilst biti divām vērtībām. Ja kāds no bitiem ir 1, tas dod 1. Ja nē, tas dod 0. Piemēram,

 12 = 00001100 (binārā formātā) 25 = 00011001 (binārā formātā) pa bitiem VAI 12 un 25 darbības 00001100 vai 00011001 ________ 00011101 = 29 (aiz komata)

Piemērs: Bitwise vai darbība

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

Palaidot programmu, izeja būs:

 29

2. un

andFunkcija salīdzina atbilst biti divām vērtībām. Ja abi biti ir 1, to novērtē uz 1. Ja kāds no bitiem ir 0, tas tiek vērtēts uz 0. Piemēram,

 12 = 00001100 (binārā) 25 = 00011001 (binārā) 12 un 25 bitu darbība 00001100 un 00011001 ________ 00001000 = 8 (decimāldaļās)

Piemērs: Bitwise un darbība

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

Palaidot programmu, izeja būs:

 8

3. xor

xorFunkcija salīdzina atbilst biti divām vērtībām. Ja atbilstošie biti ir atšķirīgi, tas dod 1. Ja atbilstošie biti ir vienādi, tas dod 0. Piemēram,

 12 = 00001100 (binārā formātā) 25 = 00011001 (binārā formātā) pa bitiem vai 12 un 25 darbības 00001100 xor 00011001 ________ 00010101 = 21 (decimāldaļās)

Piemērs: Darbība pa bitiem vai xor

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

Palaidot programmu, izeja būs:

 21

4. inv ()

Funkcija inv () apgriež bitu modeli. Tas veic ik pēc 0 līdz 1 un ik pēc 1 līdz 0.

 35 = 00100011 (binārā formātā) Papildinājums ar bitiem pa 35 00100011 ________ 11011100 = 220 (aiz komata)

Piemērs: papildinājums pa bitiem

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

Palaidot programmu, izeja būs:

 -36

Kāpēc mēs iegūstam izeju -36, nevis 220?

Tas ir tāpēc, ka kompilators rāda šī skaitļa 2 papildinājumus; binārā skaitļa negatīvs apzīmējums.

Jebkuram veselam skaitlim n būs n papildinājums 2 -(n+1).

 Decimāls binārā 2 papildinājums --------- --------- ---------------------------- ----------- 0 00000000 - (11111111 + 1) = -00000000 = -0 (decimāldaļa) 1 00000001 - (11111110 + 1) = -11111111 = -256 (decimālskaitlis) 12 00001100 - (11110011 +1) = -11110100 = -244 (decimālskaitlis) 220 11011100 - (00100011 + 1) = -00100100 = -36 (decimāldaļa) Piezīme: Pārplūde tiek ignorēta, aprēķinot 2. papildinājumu.

35 papildinājums bitā ir 220 (aiz komata). 2 papildinājums no 220 ir -36. Tādējādi izeja ir -36, nevis 220.

5. shl

Par shlfunkciju pārmaiņas bit modelis pa kreisi ar noteiktu skaitu noteiktajā bitiem, un nulles biti tiek pārvietoti uz zemu pasūtījuma pozīcijām.

 212 (binārā: 11010100) 212 shl 1 novērtē līdz 424 (binārā: 110101000) 212 shl 0 novērtē līdz 212 (binārā: 11010100) 212 shl 4 novērtē līdz 3392 (binārā: 110101000000)

Piemērs: Bitu kustība pa kreisi

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

Palaidot programmu, izeja būs:

 424 212 3392

6. shr

Par shrfunkciju pārmaiņas mazliet pattery pa labi pa certin skaitu noteiktajā bitiem.

 212 (binārā: 11010100) 212 shr 1 novērtē līdz 106 (binārā: 01101010) 212 shr 0 vērtē līdz 212 (binārā: 11010100) 212 shr 8 vērtē līdz 0 (binārā: 00000000)

Ja skaitlis ir 2 papildinājuma parakstīts skaitlis, zīmes bits tiek pārvietots augstākās kārtas pozīcijās.

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

Palaidot programmu, grupa būs:

 106 212 0

7. ushr

Par ushrfunkciju pārmaiņas nulli uz visvairāk pa kreisi pozīcijā.

Piemērs: parakstīta un neparakstīta labā maiņa

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

Palaidot programmu, izeja būs:

 2 2 -3 2147483645

Ievērojiet, kā parakstītā un neparakstītā labās nobīdes funkcija darbojas atšķirīgi 2 papildinājumam.

2 papildinājums 2147483645ir 3.

Interesanti raksti...