Οι χειριστές bitwise είναι βολικοί στη χρήση και μπορούν να οδηγήσουν σε φουσκάλες γρήγορο κώδικα. Μάθετε τι είναι και πώς να τα χρησιμοποιήσετε.
Οι τελεστές bitwise είναι εκείνοι που δρουν σε δυαδικό επίπεδο. Συχνά εκτελούνται πολύ γρήγορα και συνήθως ενεργούν σε δύο τελεστές.
Μπορείτε να χρησιμοποιήσετε τελεστές bitwise για να χειριστείτε δυαδικούς αριθμούς, να βελτιστοποιήσετε τον κώδικα, να συμπιέσετε δεδομένα και να εφαρμόσετε τεχνικές για γραφικά ή προγραμματισμό παιχνιδιών. Όπως οι περισσότερες άλλες γλώσσες προγραμματισμού, η JavaScript έχει εξαιρετική υποστήριξη για λειτουργίες bitwise.
Τι είναι οι χειριστές;
Οι περισσότερες γλώσσες προγραμματισμού χρησιμοποιούν την έννοια του "τελεστή" - ένα σύμβολο που λέει στον διερμηνέα να εκτελέσει μια συγκεκριμένη μαθηματική, σχεσιακή ή λογική πράξη.
Υπάρχουν πολλά διαφορετικούς τύπους τελεστών JavaScript θα πρέπει να γνωρίζετε, από αυτούς που μοιάζουν με τυπικούς μαθηματικούς τελεστές, όπως το "+", έως τους τελεστές που συγκρίνουν δύο τιμές. Οι τελεστές bitwise είναι ένα ειδικό σύνολο που ασχολείται με δυαδικούς αριθμούς.
Bitwise AND (&) Operator
Το JavaScript bitwise ΚΑΙ (&) ο τελεστής συγκρίνει τα αντίστοιχα bit των δύο δυαδικοί τελεστές — αριθμοί που περιέχουν μόνο 0 και 1. Για κάθε ζεύγος bit εισόδου, το αντίστοιχο bit εξόδου είναι "1" εάν και τα δύο bit εισόδου είναι "1" ή "0" διαφορετικά.
Ακολουθεί η σύνταξη του τελεστή bitwise AND:
α & β
Σε αυτό το παράδειγμα, ένα και σι είναι οι τελεστές στους οποίους εκτελείτε τη λειτουργία bitwise.
Δείτε πώς λειτουργεί ο τελεστής bitwise AND:
- Η λειτουργία AND ισχύει για κάθε ζεύγος αντίστοιχων bit ένα και σι από δεξιά προς τα αριστερά.
- Εάν και τα δύο bit είναι 1, το αποτέλεσμα είναι 1. Εάν ένα από τα bit είναι 0, το αποτέλεσμα είναι 0.
- Το αποτέλεσμα είναι ένας νέος αριθμός όπου κάθε bit αντιπροσωπεύει το αποτέλεσμα της λειτουργίας AND στα αντίστοιχα bit του ένα και σι.
Για παράδειγμα:
αφήνω α = 50; // 00110010
αφήνω β = 100; // 01100100αφήνω αποτέλεσμα = a & b; // 00100000
κονσόλα.log (αποτέλεσμα); // 32
Στο παραπάνω παράδειγμα, ένα είναι 50 σε δεκαδικό, ισοδύναμο με τον δυαδικό αριθμό 00110010, και σι είναι 100 σε δεκαδικό, ισοδύναμο με τον δυαδικό αριθμό 01100100. Ο τελεστής AND συγκρίνει κάθε ζεύγος αντίστοιχων bit από τα δεξιά προς τα αριστερά και παράγει τον δυαδικό αριθμό 00100000 που προκύπτει, ο οποίος είναι 32 σε δεκαδικό.
Bitwise OR (|) Operator
Το bitwise OR (|) ο τελεστής συγκρίνει τα αντίστοιχα bit δύο τελεστών και επιστρέφει "1" εάν ένα ή και τα δύο bit είναι "1" και "0" εάν και τα δύο bit είναι "0".
Ακολουθεί η σύνταξη του τελεστή bitwise OR:
α | σι
Οπου ένα και σι είναι οι τελεστές της πράξης.
Ο τελεστής bitwise OR (|) λειτουργεί με τον ίδιο τρόπο όπως ο τελεστής bitwise AND. Η μόνη διαφορά είναι ότι ο τελεστής OR επιστρέφει "1" εάν "κάθε από τα bit" είναι "1" και "0" εάν "και τα δύο" bit είναι "0".
Για παράδειγμα:
αφήνω α = 50; // 00110010
αφήνω β = 100; // 01100100αφήνω αποτέλεσμα = α | σι; // 01110110
κονσόλα.log (αποτέλεσμα); // 118
Στο παραπάνω παράδειγμα, ο τελεστής bitwise OR συγκρίνει κάθε ζεύγος bit από δεξιά προς τα αριστερά (δηλ. 0 | 0 = 0, 0 | 1 = 1, 1 | 1 = 1, και ούτω καθεξής). Ο δυαδικός αριθμός που προκύπτει είναι 01110110, που είναι 118 σε δεκαδικό.
Χειριστής Bitwise XOR (^).
Το bitwise XOR (^) ο τελεστής συγκρίνει τα αντίστοιχα bit δύο τελεστών και επιστρέφει "1" εάν ο ένας αλλά όχι και οι δύο τελεστές είναι "1" και "0" εάν και οι δύο τελεστές είναι "1" ή "0".
Ακολουθεί η σύνταξη του τελεστή XOR bitwise:
α ^ β
Οπου ένα και σι είναι οι τελεστές της πράξης.
Ο τελεστής XOR bitwise λειτουργεί με τον ίδιο τρόπο όπως οι τελεστές bitwise OR και AND. Η μόνη διαφορά είναι ότι επιστρέφει "1" εάν "όποιος αλλά όχι και οι δύο" από τους τελεστές είναι "1" και "0" εάν "και οι δύο" από τους τελεστές είναι "1" ή "0".
Για παράδειγμα:
αφήνω α = 50; // 00110010
αφήνω β = 100; // 01100100αφήνω αποτέλεσμα = a ^ b; // 01010110
κονσόλα.log (αποτέλεσμα); // 86
Στο παραπάνω παράδειγμα, ο τελεστής XOR συγκρίνει κάθε ζεύγος bit από δεξιά προς τα αριστερά (δηλ. 0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 1 = 0, και ούτω καθεξής). Ο δυαδικός αριθμός που προκύπτει είναι 01010110, που είναι 86 σε δεκαδικό.
Χειριστής bitwise NOT (~).
Το bitwise ΟΧΙ (~) ο τελεστής είναι ένας μονομερής τελεστής που λειτουργεί σε έναν μόνο ακέραιο αντιστρέφοντας όλα τα bit του. Με άλλα λόγια, αλλάζει κάθε bit "0" σε "1" και κάθε bit "1" σε "0".
Εδώ είναι η σύνταξη του bitwise τελεστή NOT:
~ γ
Οπου ντο είναι ο τελεστής.
Ο τελεστής δυαδικών ψηφίων NOT λειτουργεί αναστρέφοντας όλα τα bit ενός τελεστή, συμπεριλαμβανομένων των bit του πρόσημου.
Για παράδειγμα:
αφήνω c = 10; // 00001010
αφήνω d = -10; // 11110110
κονσόλα.log(~c); // 11110101
κονσόλα.log(~d); // 00001001
Στο παραπάνω παράδειγμα, ο τελεστής NOT αντιστρέφει όλα τα bit (δηλ. 0 → 1, 1 → 0, κ.λπ.), συμπεριλαμβανομένων των bits πρόσημου.
Αριστερός χειριστής Shift (<
Ο τελεστής αριστερού shift μετατοπίζει τα bit ενός δεδομένου αριθμού προς τα αριστερά. Ο τελεστής παίρνει δύο τελεστές: τον αριθμό προς μετατόπιση και τον αριθμό των δυαδικών ψηφίων για να τον μετατοπίσει.
Ακολουθεί η σύνταξη για τον τελεστή αριστερού shift:
α << β
Οπου ένα είναι ο τελεστής για τον αριστερό τελεστή μετατόπισης και σι είναι ο αριθμός των bit κατά τον οποίο ο τελεστής θα μετατοπίσει τον τελεστή.
Ο τελεστής αριστερού shift λειτουργεί μετατοπίζοντας κάθε bit ενός τελεστή προς τα αριστερά κατά τον καθορισμένο αριθμό θέσεων και απορρίπτοντας τα επιπλέον bit που μετατοπίστηκαν προς τα αριστερά.
Για παράδειγμα:
αφήνω α = 50; // 00110010
αφήνω β = 2;αφήνω αποτέλεσμα = a << b; // 11001000
κονσόλα.log (αποτέλεσμα); // 200
Στο παραπάνω παράδειγμα, ο τελεστής αριστερού shift μετατόπισε το δεκαδικό 50 του δυαδικού 00110010 κατά δύο θέσεις. Η δυαδική τιμή που προκύπτει είναι 11001000, που είναι 200 ως δεκαδικό.
Χειριστής Δεξιάς Μετατόπισης (>>) που διαδίδει το σήμα
Η μετατόπιση προς τα δεξιά (>>) μετατοπίζει τα bit ενός αριθμού προς τα δεξιά διατηρώντας το πρόσημο του αρχικού αριθμού. Ο τελεστής παίρνει δύο τελεστές: τον αριθμό προς μετατόπιση και τον αριθμό των δυαδικών ψηφίων για να τον μετατοπίσει.
Ακολουθεί η σύνταξη για τον τελεστή δεξιάς μετατόπισης που διαδίδει πρόσημο:
α >> β
Οπου ένα είναι ο τελεστής για τον δεξιό τελεστή μετατόπισης και σι είναι ο αριθμός των bit κατά τον οποίο ο τελεστής θα μετατοπίσει τον τελεστή.
Ο χειριστής δεξιάς βάρδιας που διαδίδει το σήμα λειτουργεί παρόμοια με τον τελεστή αριστερής βάρδιας. η μόνη διαφορά στον τρόπο λειτουργίας είναι ότι η δεξιά βάρδια διατηρεί το πρόσημο.
Για παράδειγμα:
αφήνω α = -50; // 11001110
αφήνω β = 2;αφήνω αποτέλεσμα = a >> b; // 11110011
κονσόλα.log (αποτέλεσμα); // -13
Στο παραπάνω παράδειγμα, ο τελεστής μετατόπισης δεξιά μετατόπισε το δεκαδικό -50 (11001110) δύο κενά προς τα δεξιά με αποτέλεσμα το δεκαδικό -13 (11110011).
Ανυπόγραφος τελεστής Right Shift (>>>).
Η ανυπόγραφη δεξιά μετατόπιση (>>>) ο χειριστής μετατοπίζει τα bit ενός αριθμού προς τα δεξιά κατά έναν καθορισμένο αριθμό θέσεων και γεμίζει τα κενά στα αριστερά με μηδενικά. Ο χειριστής απορρίπτει τα πλεονάζοντα bits που μετατοπίζει προς τα δεξιά.
Ακολουθεί η σύνταξη για τον ανυπόγραφο τελεστή δεξιού shift:
α >>> β
Οπου ένα είναι ο τελεστής για τον δεξιό τελεστή μετατόπισης και σι είναι ο αριθμός των bit κατά τον οποίο ο τελεστής θα μετατοπίσει τον τελεστή.
Ο μη υπογεγραμμένος χειριστής δεξιάς βάρδιας λειτουργεί παρόμοια με τη δεξιά βάρδια. Ωστόσο, σε αντίθεση με τον δεξιό χειριστή βάρδιας (>>), δεν διατηρεί το πρόσημο ενός αριθμού κατά τη μετατόπιση. Αντίθετα, αντιμετωπίζει τον αριθμό ως ανυπόγραφο ακέραιο και γεμίζει το αριστερό bit με ένα μηδέν.
Για παράδειγμα:
αφήνω α = -5; // 11111111 11111111 11111111 11111011
αφήνω β = 2;αφήνω αποτέλεσμα = a >>> b; // 00111111 11111111 11111111 11111110
κονσόλα.log (αποτέλεσμα); // 1073741822
Σε αυτό το παράδειγμα, ο ανυπόγραφος τελεστής μετατόπισης δεξιά μετατόπισε το "-5" δύο κενά προς τα δεξιά, αφαιρώντας ουσιαστικά το πρόσημο και καταλήγοντας στο δεκαδικό "1073741822".
Οι Εφαρμογές των Bitwise Operators
Με το χειρισμό μεμονωμένων δυαδικών ψηφίων σε δυαδικούς αριθμούς, οι τελεστές bitwise μπορούν να δημιουργήσουν πολύπλοκες λειτουργίες που διαφορετικά είναι δύσκολο ή αδύνατο να επιτευχθεί με τις παραδοσιακές αριθμητικές πράξεις.
Η κατανόηση του τρόπου χρήσης τελεστών bitwise μπορεί να σας βοηθήσει να δημιουργήσετε πιο αποτελεσματικές και αποδοτικές εφαρμογές web.