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

Котлин пружа неколико функција (у облику инфикса) за обављање битних и битних помака. У овом чланку ћете научити да изводите операције на нивоу бита у Котлину уз помоћ примера.

Оператори битног помака и помака битова користе се на само два интегрална типа ( Intи Long) за извођење операција на нивоу бита.

Да би извршио ове операције, Котлин пружа 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Функција упоређује одговарајуће делове две вредности. Ако су одговарајући битови различити, даје 1. Ако су одговарајући битови исти, даје 0. На пример,

 12 = 00001100 (у бинарном) 25 = 00011001 (у бинарном) Битно ИЛИ рад 12 и 25 00001100 кор 00011001 ________ 00010101 = 21 (у децималном)

Пример: Битовна кор операција

 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. инв ()

Функција инв () обрће образац бита. Прави сваких 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 тог броја; негативан запис бинарног броја.

За било који цео број н, допуна броја 2 биће н -(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 (у децималу). Додатак двојке од 220 је -36. Дакле, излаз је -36 уместо 220.

5. схл

У shlФункција помера угризао образац са леве стране одређеног броја одређених бита, а нула битови се помера у лов-реда позицијама.

 212 (у бинарном: 11010100) 212 схл 1 процењује на 424 (у бинарном: 110101000) 212 схл 0 процењује на 212 (у бинарном: 11010100) 212 схл 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функција промене угризао Паттери са десне стране цертин броја одређених бита.

 212 (у бинарном: 11010100) 212 схр 1 процењује на 106 (у бинарном: 01101010) 212 схр 0 процењује на 212 (у бинарном: 11010100) 212 схр 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Функција помера нулу на крајњој левој позицији.

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

 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.

Занимљиви Чланци...