C Bitwise χειριστές: AND, OR, XOR, Shift & Συμπλήρωμα (με παράδειγμα)

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

Anonim

Τι είναι οι χειριστές Bitwise;

Οι BITWISE OPERATORS χρησιμοποιούνται για χειρισμό δεδομένων σε επίπεδο bit, που ονομάζεται επίσης προγραμματισμός επιπέδου bit. Το Bitwise λειτουργεί σε ένα ή περισσότερα μοτίβα bit ή δυαδικούς αριθμούς στο επίπεδο των μεμονωμένων bit. Χρησιμοποιούνται σε αριθμητικούς υπολογισμούς για να κάνουν τη διαδικασία υπολογισμού πιο γρήγορη.

Ακολουθεί η λίστα των τελεφερίκ που παρέχονται από τη γλώσσα προγραμματισμού «C»:

Χειριστής Εννοια
& Τελεστής bitwise AND
| Bitwise Ή τελεστής
^ Bitwise αποκλειστικός τελεστής Ή
~ Ο Διαχειριστής Συμπληρώματος της Binary One είναι ένας απλός χειριστής
<< Αριστερός χειριστής στροφής
>> Χειριστής δεξιάς βάρδιας

Οι τελεστές Bitwise δεν μπορούν να εφαρμοστούν άμεσα σε πρωτόγονους τύπους δεδομένων όπως float, double κ.λπ. Να θυμάστε πάντα ένα πράγμα ότι οι τελεστές bitwise χρησιμοποιούνται κυρίως με τον ακέραιο τύπο δεδομένων λόγω της συμβατότητάς του.

Οι λογικοί τελεστές bitwise εργάζονται στα δεδομένα bit-bit, ξεκινώντας από το λιγότερο σημαντικό bit, δηλαδή LSB bit που είναι το πιο δεξί bit, δουλεύοντας προς το MSB (Most Significant Bit) που είναι το αριστερότερο bit.

Το αποτέλεσμα του υπολογισμού των λογικών τελεστών bitwise φαίνεται στον παρακάτω πίνακα.

Χ γ x & ε x | γ x ε
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

Σε αυτό το σεμινάριο, θα μάθετε-

  • Τι είναι οι χειριστές Bitwise;
  • Bitwise ΚΑΙ
  • Bitwise Ή
  • Αποκλειστικό Bitwise Ή
  • Τελεστές μετατόπισης bitwise
  • Τελεστής συμπληρώματος Bitwise

Bitwise ΚΑΙ

Αυτός είναι ένας από τους πιο συχνά χρησιμοποιούμενους λογικούς bitwise τελεστές. Αντιπροσωπεύεται από ένα και μόνο σύμβολο (&). Δύο ακέραιες εκφράσεις γράφονται σε κάθε πλευρά του τελεστή (&).

Το αποτέλεσμα της λειτουργίας bitwise AND είναι 1 εάν και τα δύο bit έχουν την τιμή ως 1. Διαφορετικά, το αποτέλεσμα είναι πάντα 0.

Ας θεωρήσουμε ότι έχουμε 2 μεταβλητές op1 και op2 με τιμές ως εξής:

Op1 = 0000 1101Op2 = 0001 1001

Το αποτέλεσμα της λειτουργίας AND στις μεταβλητές op1 και op2 θα είναι

Result = 0000 1001

Όπως μπορούμε να δούμε, δύο μεταβλητές συγκρίνονται σιγά-σιγά. Όποτε η τιμή ενός bit και στις δύο μεταβλητές είναι 1, τότε το αποτέλεσμα θα είναι 1 ή αλλιώς 0.

Bitwise Ή

Αντιπροσωπεύεται από ένα μοναδικό κάθετο σύμβολο ράβδου (|). Δύο ακέραιες εκφράσεις γράφονται σε κάθε πλευρά του τελεστή (|).

Το αποτέλεσμα της λειτουργίας bitwise OR είναι 1 εάν τουλάχιστον μία από την έκφραση έχει την τιμή ως 1. Διαφορετικά, το αποτέλεσμα είναι πάντα 0.

Ας θεωρήσουμε ότι έχουμε 2 μεταβλητές op1 και op2 με τιμές ως εξής:

Op1 = 0000 1101Op2 = 0001 1001

Το αποτέλεσμα της λειτουργίας OR στις μεταβλητές op1 και op2 θα είναι

Result = 0001 1101

Όπως μπορούμε να δούμε, δύο μεταβλητές συγκρίνονται σιγά-σιγά. Όποτε η τιμή ενός bit σε μία από τις μεταβλητές είναι 1, τότε το αποτέλεσμα θα είναι 1 ή αλλιώς 0.

Αποκλειστικό Bitwise Ή

Αντιπροσωπεύεται από ένα σύμβολο (^). Δύο ακέραιες εκφράσεις γράφονται σε κάθε πλευρά του τελεστή (^).

Το αποτέλεσμα της λειτουργίας bitwise Exclusive-OR είναι 1 εάν μόνο μία από την έκφραση έχει την τιμή ως 1. Διαφορετικά, το αποτέλεσμα είναι πάντα 0.

Ας θεωρήσουμε ότι έχουμε 2 μεταβλητές op1 και op2 με τιμές ως εξής:

Op1 = 0000 1101Op2 = 0001 1001

Το αποτέλεσμα της λειτουργίας OR στις μεταβλητές op1 και op2 θα είναι

Result = 0001 0100

Όπως μπορούμε να δούμε, δύο μεταβλητές συγκρίνονται σιγά-σιγά. Όποτε μόνο μία μεταβλητή διατηρεί την τιμή 1, τότε το αποτέλεσμα είναι 0 αλλιώς 0 θα είναι το αποτέλεσμα.

Ας γράψουμε ένα απλό πρόγραμμα που δείχνει λογικά τελεστές.

#include int main(){int a = 20; /* 20 = 010100 */int b = 21; /* 21 = 010101 */int c = 0;c = a & b; /* 20 = 010100 */printf("AND - Value of c is %d\n", c );c = a | b; /* 21 = 010101 */printf("OR - Value of c is %d\n", c );c = a b; /* 1 = 0001 */printf("Exclusive-OR - Value of c is %d\n", c );getch();}

Παραγωγή:

AND - Value of c is 20OR - Value of c is 21Exclusive-OR - Value of c is 1

Τελεστές μετατόπισης bitwise

Οι τελεστές μετατόπισης bitwise χρησιμοποιούνται για να μετακινούν / μετατοπίζουν τα μοτίβα bit είτε προς τα αριστερά είτε προς τη δεξιά πλευρά. Αριστερά και δεξιά είναι δύο τελεστές αλλαγής ταχυτήτων που παρέχονται από το «C» οι οποίοι παρουσιάζονται ως εξής:

Operand << n (Left Shift)Operand >> n (Right Shift)

Εδώ,

  • ένας τελεστής είναι μια ακέραια έκφραση στην οποία πρέπει να εκτελέσουμε τη λειτουργία shift.
  • 'n' είναι ο συνολικός αριθμός θέσεων bit που πρέπει να αλλάξουμε στην ακέραια έκφραση.

Η αριστερή λειτουργία μετατόπισης θα μετατοπίσει τον αριθμό «n» bits στην αριστερή πλευρά. Τα αριστερότερα bit στην παράσταση θα εμφανιστούν και τα n bit με την τιμή 0 θα συμπληρωθούν στη δεξιά πλευρά.

Η λειτουργία δεξιάς μετατόπισης θα μετατοπίσει τον αριθμό «n» bit στη δεξιά πλευρά. Τα δεξιότερα ψηφία 'n' στην παράσταση θα εμφανιστούν και η τιμή 0 θα συμπληρωθεί στην αριστερή πλευρά.

Παράδειγμα: το x είναι μια ακέραια έκφραση με δεδομένα 1111. Μετά την εκτέλεση της λειτουργίας shift, το αποτέλεσμα θα είναι:

x << 2 (left shift) = 1111<<2 = 1100x>>2 (right shift) = 1111>>2 = 0011

Οι χειριστές μετατοπίσεων μπορούν να συνδυαστούν και στη συνέχεια μπορούν να χρησιμοποιηθούν για την εξαγωγή των δεδομένων από την ακέραια έκφραση. Ας γράψουμε ένα πρόγραμμα για να δείξουμε τη χρήση των τελεστών μετατόπισης bitwise.

#include int main() {int a = 20; /* 20 = 010100 */int c = 0;c = a << 2; /* 80 = 101000 */printf("Left shift - Value of c is %d\n", c );c = a >> 2; /*05 = 000101 */printf("Right shift - Value of c is %d\n", c );return 0;}

Παραγωγή:

Left shift - Value of c is 80Right shift - Value of c is 5

Μετά την εκτέλεση της λειτουργίας αριστεράς βάρδιας η τιμή θα γίνει 80 των οποίων το δυαδικό ισοδύναμο είναι 101000.

Μετά την εκτέλεση της λειτουργίας σωστής αλλαγής, η τιμή θα γίνει 5 των οποίων το δυαδικό ισοδύναμο είναι 000101.

Τελεστής συμπληρώματος Bitwise

Το συμπλήρωμα bitwise ονομάζεται επίσης ως τελεστής συμπληρώματος κάποιου, αφού παίρνει πάντα μόνο μία τιμή ή τελεστή. Είναι ένας απλός χειριστής.

Όταν κάνουμε συμπλήρωμα σε οποιοδήποτε bits, όλα τα 1 γίνονται 0 και αντίστροφα.

Εάν έχουμε μια ακέραια έκφραση που περιέχει 0000 1111 τότε μετά την εκτέλεση της λειτουργίας συμπλήρωσης bitwise η τιμή θα γίνει 1111 0000.

Ο τελεστής συμπληρώματος bitwise δηλώνεται με σύμβολο tilde (~).

Ας γράψουμε ένα πρόγραμμα που καταδεικνύει την εφαρμογή του τελεστικού συμπληρώματος.

#include int main() {int a = 10; /* 10 = 1010 */int c = 0;c = ~(a);printf("Complement - Value of c is %d\n", c );return 0;}

Παραγωγή:

Complement - Value of c is -11

Εδώ είναι ένα άλλο πρόγραμμα, με ένα παράδειγμα όλων των οπερών που συζητήθηκαν μέχρι τώρα:

#include main() {unsigned int x = 48; /* 48 = 0011 0000 */unsigned int y = 13; /* 13 = 0000 1101 */int z = 0;z =x & y; /* 0 = 0000 0000 */printf("Bitwise AND Operator - x & y = %d\n", z );z = x | y; /* 61 = 0011 1101 */printf("Bitwise OR Operator - x | y = %d\n", z );z= x^y; /* 61 = 0011 1101 */printf("Bitwise XOR Operator- x^y= %d\n", z);z = ~x; /*-61 = 1100 0011 */printf("Bitwise One's Complement Operator - ~x = %d\n", z);z = x << 2; /* 192 = 1100 0000 */printf("Bitwise Left Shift Operator x << 2= %d\n", z );z= x >> 2; /* 12 = 0000 1100 */printf ("Bitwise Right Shift Operator x >> 2= %d\n", z );}

Αφού καταρτίσουμε και εκτελέσουμε το πρόγραμμα, παράγει το ακόλουθο αποτέλεσμα:

Bitwise AND Operator - x & y = 0Bitwise OR Operator - x | y = 61Bitwise XOR Operator- x^y= 61Bitwise One's Complement Operator - ~x = -49Bitwise Left Shift Operator x << 2= 192Bitwise Right Shift Operator x >> 2= 12

Περίληψη

  • Οι τελεστές Bitwise είναι ειδικά χειριστήρια που παρέχονται από το «C.»
  • Χρησιμοποιούνται σε προγραμματισμό επιπέδου bit.
  • Αυτοί οι τελεστές χρησιμοποιούνται για τον χειρισμό bit μιας ακέραιας έκφρασης.
  • Λογική, μετατόπιση και συμπλήρωμα είναι τρεις τύποι τελεστών bitwise.
  • Ο τελεστής συμπληρώματος bitwise χρησιμοποιείται για την αντιστροφή των bits μιας έκφρασης.