Λειτουργίες Kotlin Bitwise και Bitshift

Πίνακας περιεχομένων

Το 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.

ενδιαφέροντα άρθρα...