Kotlin menyediakan beberapa fungsi (dalam bentuk infix) untuk melakukan operasi bitwise dan bitshift. Dalam artikel ini, anda akan belajar melakukan operasi tahap bit di Kotlin dengan bantuan contoh.
Pengendali bitwise dan bit shift hanya digunakan pada dua jenis integral ( Int
dan Long
) untuk melakukan operasi tahap bit.
Untuk melakukan operasi ini, Kotlin menyediakan 7 fungsi menggunakan notasi infix.
1. atau
Yang or
fungsi membandingkan bit sepadan bagi dua nilai. Sekiranya salah satu daripada bit adalah 1, ia memberikan 1. Jika tidak, ia memberikan 0. Contohnya,
12 = 00001100 (Dalam Binari) 25 = 00011001 (Dalam Binari) Bitwise ATAU Operasi 12 dan 25 00001100 atau 00011001 ________ 00011101 = 29 (Dalam perpuluhan)
Contoh: Bitwise atau Operasi
fun main(args: Array) ( val number1 = 12 val number2 = 25 val result: Int result = number1 or number2 // result = number1.or(number2) println(result) )
Semasa anda menjalankan program, outputnya adalah:
29
2. dan
Yang and
fungsi membandingkan bit sepadan bagi dua nilai. Sekiranya kedua-dua bit adalah 1, ia dinilai menjadi 1. Sekiranya salah satu bit adalah 0, ia dinilai hingga 0. Contohnya,
12 = 00001100 (Dalam Binari) 25 = 00011001 (Dalam Binari) Operasi Bit 12 dan 25 00001100 dan 00011001 ________ 00001000 = 8 (Dalam perpuluhan)
Contoh: Bitwise dan Operasi
fun main(args: Array) ( val number1 = 12 val number2 = 25 val result: Int result = number1 and number2 // result = number1.and(number2) println(result) )
Semasa anda menjalankan program, outputnya adalah:
8
3. xor
Yang xor
fungsi membandingkan bit sepadan bagi dua nilai. Sekiranya bit sepadan berbeza, ia memberi 1. Sekiranya bit sepadan sama, ia memberikan 0. Contohnya,
12 = 00001100 (Dalam Binari) 25 = 00011001 (Dalam Perduaan) Bitwise ATAU Operasi 12 dan 25 00001100 xor 00011001 ________ 00010101 = 21 (Dalam perpuluhan)
Contoh: Operasi Bitwise xor
fun main(args: Array) ( val number1 = 12 val number2 = 25 val result: Int result = number1 xor number2 // result = number1.xor(number2) println(result) )
Semasa anda menjalankan program, outputnya adalah:
21
4. inv ()
Fungsi inv () membalikkan corak bit. Ia menjadikan setiap 0 hingga 1, dan setiap 1 hingga 0.
35 = 00100011 (Dalam Binari) Pelengkap Bitwise Operasi 35 00100011 ________ 11011100 = 220 (Dalam perpuluhan)
Contoh: Pelengkap bitwise
fun main(args: Array) ( val number = 35 val result: Int result = number.inv() println(result) )
Semasa anda menjalankan program, outputnya adalah:
-36
Mengapa kita mendapat output -36 dan bukannya 220?
Ini kerana penyusun menunjukkan pelengkap nombor 2; notasi negatif bagi nombor perduaan.
Untuk bilangan bulat n, pelengkap n 2 adalah -(n+1)
.
Pelengkap Perpuluhan Perduaan 2 --------- --------- ---------------------------- ----------- 0 00000000 - (11111111 + 1) = -00000000 = -0 (perpuluhan) 1 00000001 - (11111110 + 1) = -11111111 = -256 (perpuluhan) 12 00001100 - (11110011 +1) = -11110100 = -244 (perpuluhan) 220 11011100 - (00100011 + 1) = -00100100 = -36 (perpuluhan) Catatan: Limpahan diabaikan semasa mengira pelengkap 2.
Pelengkap bitwise 35 ialah 220 (dalam perpuluhan). Pelengkap 2 dari 220 ialah -36. Oleh itu, output adalah -36 dan bukannya 220.
5. shl
The shl
perubahan fungsi menggigit corak ke kiri dengan jumlah tertentu bit dinyatakan, dan sifar bit dipindahkan ke dalam kedudukan yang rendah-perintah.
212 (Dalam binari: 11010100) 212 shl 1 menilai menjadi 424 (Dalam binari: 110101000) 212 shl 0 menilai hingga 212 (Dalam binari: 11010100) 212 shl 4 menilai hingga 3392 (Dalam binari: 110101000000)
Contoh: Pergeseran kiri bitwise
fun main(args: Array) ( val number = 212 println(number shl 1) println(number shl 0) println(number shl 4) )
Semasa anda menjalankan program, outputnya adalah:
424 212 3392
6. shr
The shr
perubahan fungsi bit pattery ke kanan dengan jumlah certin bit dinyatakan.
212 (Dalam binari: 11010100) 212 shr 1 menilai hingga 106 (Dalam binari: 01101010) 212 shr 0 menilai hingga 212 (Dalam binari: 11010100) 212 shr 8 menilai menjadi 0 (Dalam binari: 00000000)
Sekiranya nombor itu adalah nombor pelengkap 2 yang ditandatangani, bit tanda dialihkan ke kedudukan pesanan tinggi.
fun main(args: Array) ( val number = 212 println(number shr 1) println(number shr 0) println(number shr 8) )
Semasa anda menjalankan program, ouput akan menjadi:
106 212 0
7. ushr
The ushr
perubahan fungsi sifar ke dalam kedudukan yang paling kiri.
Contoh: Shift Kanan yang ditandatangani dan tidak ditandatangani
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) )
Semasa anda menjalankan program, outputnya adalah:
2 2 -3 2147483645
Perhatikan, bagaimana fungsi shift kanan yang ditandatangani dan tidak ditandatangani berfungsi berbeza untuk pelengkap 2.
Pelengkap 2 2147483645
adalah 3
.