Το Kotlin παρέχει διάφορες λειτουργίες (σε μορφή infix) για να εκτελεί λειτουργία bitwise και bitshift. Σε αυτό το άρθρο, θα μάθετε να εκτελείτε λειτουργία επιπέδου bit στο Kotlin με τη βοήθεια παραδειγμάτων.
Οι τελεστές bitwise και bit shift χρησιμοποιούνται μόνο σε δύο ολοκληρωμένους τύπους ( Int
και Long
) για την εκτέλεση λειτουργιών σε επίπεδο bit.
Για να πραγματοποιήσει αυτές τις λειτουργίες, το Kotlin παρέχει 7 λειτουργίες χρησιμοποιώντας συμβολισμό infix.
1. ή
Η or
συνάρτηση συγκρίνει τα αντίστοιχα δυαδικά ψηφία. Εάν ένα από τα bit είναι 1, δίνει 1. Εάν όχι, δίνει 0. Για παράδειγμα,
12 = 00001100 (In Binary) 25 = 00011001 (In Binary) Bitwise Ή Λειτουργία 12 και 25 00001100 ή 00011001 ________ 00011101 = 29 (Σε δεκαδικό)
Παράδειγμα: Bitwise ή Operation
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
συνάρτηση συγκρίνει τα αντίστοιχα δυαδικά ψηφία. Εάν και τα δύο bits είναι 1, αξιολογείται σε 1. Εάν οποιοδήποτε από τα bit είναι 0, αξιολογείται σε 0. Για παράδειγμα,
12 = 00001100 (In Binary) 25 = 00011001 (In Binary) Λειτουργία bit 12 και 25 00001100 και 00011001 ________ 00001000 = 8 (Σε δεκαδικό)
Παράδειγμα: Bitwise και λειτουργία
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
Η xor
συνάρτηση συγκρίνει τα αντίστοιχα δυαδικά ψηφία. Εάν τα αντίστοιχα bits είναι διαφορετικά, δίνει 1. Εάν τα αντίστοιχα bits είναι ίδια, δίνει 0. Για παράδειγμα,
12 = 00001100 (In Binary) 25 = 00011001 (In Binary) Bitwise Ή Λειτουργία 12 και 25 00001100 xor 00011001 ________ 00010101 = 21 (Σε δεκαδικό)
Παράδειγμα: Λειτουργία 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) )
Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:
21
4. inv ()
Η συνάρτηση inv () αντιστρέφει το μοτίβο bit. Κάνει κάθε 0 έως 1 και κάθε 1 έως 0.
35 = 00100011 (In Binary) Συμπλήρωμα Bitwise Λειτουργία 35 00100011 ________ 11011100 = 220 (Σε δεκαδικό)
Παράδειγμα: Συμπλήρωμα Bitwise
fun main(args: Array) ( val number = 35 val result: Int result = number.inv() println(result) )
Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:
-36
Γιατί έχουμε έξοδο -36 αντί για 220;
Είναι επειδή ο μεταγλωττιστής δείχνει το συμπλήρωμα 2 αυτού του αριθμού. αρνητική σημείωση του δυαδικού αριθμού.
Για οποιοδήποτε ακέραιο n, το συμπλήρωμα 2 του n θα είναι -(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 (σε δεκαδικό). Το συμπλήρωμα 2 του 220 είναι -36. Ως εκ τούτου, η έξοδος είναι -36 αντί για 220.
5. shl
Η shl
συνάρτηση μετατοπίζει το μοτίβο bit προς τα αριστερά με ορισμένο αριθμό καθορισμένων bit και τα μηδενικά bit μετατοπίζονται στις θέσεις χαμηλής τάξης.
212 (Σε δυαδικό: 11010100) 212 shl 1 αξιολογείται σε 424 (Σε δυαδικό: 110101000) 212 shl 0 αξιολογείται σε 212 (Σε δυαδικό: 11010100) 212 shl 4 αξιολογείται σε 3392 (Σε δυαδικό: 110101000000)
Παράδειγμα: Αριστερή στροφή Bitwise
fun main(args: Array) ( val number = 212 println(number shl 1) println(number shl 0) println(number shl 4) )
Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:
424 212 3392
6. συρ
Η shr
συνάρτηση μετατοπίζει bit pattery προς τα δεξιά με αριθμό πιστοποιητικού συγκεκριμένων bit.
212 (Σε δυαδικό: 11010100) 212 shr 1 αξιολογείται σε 106 (Σε δυαδικό: 01101010) 212 shr 0 αξιολογείται σε 212 (Σε δυαδικό: 11010100) 212 shr 8 αξιολογείται σε 0 (Σε δυαδικό: 00000000)
Εάν ο αριθμός είναι συμπληρωματικός αριθμός 2, το σύμβολο bit μετατοπίζεται στις θέσεις υψηλής τάξης.
fun main(args: Array) ( val number = 212 println(number shr 1) println(number shr 0) println(number shr 8) )
Όταν εκτελείτε το πρόγραμμα, το αποτέλεσμα θα είναι:
106 212 0
7. ushr
Η ushr
συνάρτηση μετατοπίζεται μηδέν στην αριστερή θέση.
Παράδειγμα: υπογεγραμμένη και χωρίς υπογραφή 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) )
Όταν εκτελείτε το πρόγραμμα, η έξοδος θα είναι:
2 2 -3 2147483645
Παρατηρήστε, πως η υπογεγραμμένη και η υπογεγραμμένη λειτουργία δεξιάς αλλαγής λειτουργεί διαφορετικά για το συμπλήρωμα 2.
Το συμπλήρωμα του 2 2147483645
είναι 3
.