Kotlin, bitsel ve bitshift işlemi gerçekleştirmek için çeşitli işlevler (infix biçiminde) sağlar. Bu yazıda örnekler yardımıyla Kotlin'de bit seviyesinde işlem yapmayı öğreneceksiniz.
Bit düzeyinde işlemler gerçekleştirmek için yalnızca iki integral tipinde ( Int
ve Long
) bitsel ve bit kaydırma operatörleri kullanılır .
Bu işlemleri gerçekleştirmek için Kotlin, infix gösterimini kullanarak 7 işlev sağlar.
1. veya
or
Fonksiyon iki değerleri karşılık gelen bit karşılaştırır. Bitlerden herhangi biri 1 ise 1 verir. Değilse 0 verir. Örneğin,
12 = 00001100 (İkili Olarak) 25 = 00011001 (İkili Olarak) Bitsel VEYA 12 ve 25 İşlemleri 00001100 veya 00011001 ________ 00011101 = 29 (Ondalık olarak)
Örnek: Bitsel veya İşlem
fun main(args: Array) ( val number1 = 12 val number2 = 25 val result: Int result = number1 or number2 // result = number1.or(number2) println(result) )
Programı çalıştırdığınızda, çıktı:
29
2. ve
and
Fonksiyon iki değerleri karşılık gelen bit karşılaştırır. Her iki bit de 1 ise, 1 olarak değerlendirilir. Bitlerden herhangi biri 0 ise, 0 olarak değerlendirilir. Örneğin,
12 = 00001100 (İkili Olarak) 25 = 00011001 (İkili Olarak) 12 ve 25 Bit İşlemi 00001100 ve 00011001 ________ 00001000 = 8 (Ondalık olarak)
Örnek: Bitsel ve İşlem
fun main(args: Array) ( val number1 = 12 val number2 = 25 val result: Int result = number1 and number2 // result = number1.and(number2) println(result) )
Programı çalıştırdığınızda, çıktı:
8
3. xor
xor
Fonksiyon iki değerleri karşılık gelen bit karşılaştırır. Karşılık gelen bitler farklıysa 1 verir. Karşılık gelen bitler aynıysa 0 verir. Örneğin,
12 = 00001100 (İkili Olarak) 25 = 00011001 (İkili Olarak) Bitsel VEYA 12 ve 25 İşlemleri 00001100 xor 00011001 ________ 00010101 = 21 (Ondalık olarak)
Örnek: Bitsel xor İşlemi
fun main(args: Array) ( val number1 = 12 val number2 = 25 val result: Int result = number1 xor number2 // result = number1.xor(number2) println(result) )
Programı çalıştırdığınızda, çıktı:
21
4. inv ()
İnv () işlevi bit desenini tersine çevirir. Her 0'dan 1'e ve her 1'den 0'a yapar.
35 = 00100011 (İkili Olarak) Bitsel tamamlayıcı 35'in Bitsel tümleme İşlemi 00100011 ________ 11011100 = 220 (Ondalık olarak)
Örnek: Bitsel tamamlayıcı
fun main(args: Array) ( val number = 35 val result: Int result = number.inv() println(result) )
Programı çalıştırdığınızda, çıktı:
-36
Neden 220 yerine -36 çıktı alıyoruz?
Bunun nedeni, derleyicinin bu sayının 2'ye tümleyenini gösteriyor olmasıdır; ikili sayının negatif gösterimi.
Herhangi bir n tamsayısı için, 2'nin n'nin tamamlayıcısı olacaktır -(n+1)
.
Ondalık İkili 2'nin tamamlayıcısı --------- --------- ---------------------------- ----------- 0 00000000 - (11111111 + 1) = -00000000 = -0 (ondalık) 1 00000001 - (11111110 + 1) = -11111111 = -256 (ondalık) 12 00001100 - (11110011 +1) = -11110100 = -244 (ondalık) 220 11011100 - (00100011 + 1) = -00100100 = -36 (ondalık) Not: 2'nin tamamlayıcısı hesaplanırken taşma ihmal edilir.
35'in bitsel tamamlayıcısı 220'dir (ondalık olarak). 2'nin 220'nin tamamlayıcısı -36'dır. Dolayısıyla çıktı 220 yerine -36'dır.
5. shl
shl
İşlev kaymalar belirlenen bit belirli sayıda sola desen bit, ve sıfır bit düşük sıralı pozisyonlara kaydırılır.
212 (İkili: 11010100) 212 shl 1 424 olarak değerlendirilir (İkili olarak: 110101000) 212 shl 0 212 olarak değerlendirilir (İkili: 11010100) 212 shl 4 3392 olarak değerlendirilir (İkili olarak: 110101000000)
Örnek: Bit düzeyinde sola kaydırma
fun main(args: Array) ( val number = 212 println(number shl 1) println(number shl 0) println(number shl 4) )
Programı çalıştırdığınızda, çıktı:
424 212 3392
6. shr
shr
İşlev kaymalar belirlenen bit certin sayısına göre sağa pattery bit.
212 (İkili: 11010100) 212 shr 1, 106 olarak değerlendirilir (İkili olarak: 01101010) 212 shr 0, 212 olarak değerlendirilir (İkili: 11010100) 212 shr 8, 0 olarak değerlendirilir (İkili olarak: 00000000)
Sayı, 2'nin tamamlayıcı işaretli bir sayısıysa, işaret biti, yüksek dereceli konumlara kaydırılır.
fun main(args: Array) ( val number = 212 println(number shr 1) println(number shr 0) println(number shr 8) )
Programı çalıştırdığınızda, çıktı:
106 212 0
7. ushr
ushr
Fonksiyon kaymalar en soldaki pozisyona sıfır.
Örnek: imzalı ve imzasız Sağ 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) )
Programı çalıştırdığınızda, çıktı:
2 2-3 2147483645
İşaretli ve işaretsiz sağa kaydırma işlevinin 2'nin tamamlayıcısı için nasıl farklı çalıştığına dikkat edin.
Arasında 2'ye tümleyen 2147483645
olduğunu 3
.