C Bitwise Operators: AND, OR, XOR, Complement and Shift Operations

Σε αυτό το σεμινάριο θα μάθετε για τους 6 χειριστές bitwise στον προγραμματισμό C με παραδείγματα.

Στην αριθμητική λογική μονάδα (η οποία βρίσκεται εντός της CPU), οι μαθηματικές λειτουργίες όπως: προσθήκη, αφαίρεση, πολλαπλασιασμός και διαίρεση γίνονται σε επίπεδο bit. Για να εκτελέσετε λειτουργίες επιπέδου bit στον προγραμματισμό C, χρησιμοποιούνται τελεστικοί χειριστές.

Χειριστές Σημασία των χειριστών
& Bitwise ΚΑΙ
| Bitwise Ή
^ Bitwise XOR
~ Συμπλήρωμα Bitwise
<< Στρίψτε αριστερά
>> Στρίψτε δεξιά

Bitwise AND τελεστής &

Η έξοδος του bitwise AND είναι 1 εάν τα αντίστοιχα bits των δύο τελεστών είναι 1. Εάν οποιοδήποτε bit ενός τελεστή είναι 0, το αποτέλεσμα του αντίστοιχου bit αξιολογείται στο 0.

Ας υποθέσουμε ότι η λειτουργία bitwise AND δύο ακεραίων 12 και 25.

 12 = 00001100 (In Binary) 25 = 00011001 (In Binary) Λειτουργία Bit 12 και 25 00001100 & 00011001 ________ 00001000 = 8 (Σε δεκαδικό)

Παράδειγμα # 1: Bitwise AND

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a&b); return 0; ) 

Παραγωγή

 Έξοδος = 8

Bitwise Ή χειριστής |

Η έξοδος του bitwise OR είναι 1 εάν τουλάχιστον ένα αντίστοιχο bit από δύο τελεστές είναι 1. Στον προγραμματισμό C, ο τελεστής OR bitwise δηλώνεται με |.

12 = 00001100 (In Binary) 25 = 00011001 (In Binary) Bitwise Ή Λειτουργία 12 και 25 00001100 | 00011001 ________ 00011101 = 29 (με δεκαδικό)

Παράδειγμα # 2: Bitwise Ή

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a|b); return 0; ) 

Παραγωγή

 Έξοδος = 29

Τελεστής Bitwise XOR (αποκλειστικός Ή) ^

Το αποτέλεσμα του χειριστή bitor XOR είναι 1 εάν τα αντίστοιχα bits των δύο τελεστών είναι αντίθετα. Συμβολίζεται με ^.

 12 = 00001100 (In Binary) 25 = 00011001 (In Binary) Bitwise XOR Λειτουργία 12 και 25 00001100 00011001 ________ 00010101 = 21 (Σε δεκαδικό)

Παράδειγμα # 3: Bitwise XOR

 #include int main() ( int a = 12, b = 25; printf("Output = %d", a^b); return 0; )

Παραγωγή

 Έξοδος = 21

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

Ο χειριστής Bitwise φιλοφρόνηση είναι ένας unary τελεστής (λειτουργεί μόνο σε έναν τελεστή). Αλλάζει 1 σε 0 και 0 σε 1. Συμβολίζεται με ~.

 35 = 00100011 (In Binary) Συμπλήρωμα Bitwise Λειτουργία 35 ~ 00100011 ________ 11011100 = 220 (Σε δεκαδικό) 

Περιστρέψτε τον χειριστή συμπληρώματος bitwise στον προγραμματισμό C

Το δεξιόστροφο συμπλήρωμα του 35 (~ 35) είναι -36 αντί για 220, αλλά γιατί;

Για οποιοδήποτε ακέραιο n, θα είναι το συμπλήρωμα bit του n -(n+1). Για να το καταλάβετε αυτό, θα πρέπει να έχετε τη γνώση του συμπληρώματος 2.

Συμπλήρωμα 2

Το συμπλήρωμα του Two είναι μια λειτουργία σε δυαδικούς αριθμούς. Το συμπλήρωμα του αριθμού 2 είναι ίσο με το συμπλήρωμα αυτού του αριθμού συν 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.

Το συμπλήρωμα bitwise οποιουδήποτε αριθμού Ν είναι - (N + 1) Δείτε πώς:

 δυαδικό συμπλήρωμα N = ~ N (αντιπροσωπεύεται σε μορφή συμπληρώματος 2) 2'συμπλήρωμα ~ N = - (~ (~ N) +1) = - (N + 1) 

Παράδειγμα # 4: Συμπλήρωμα Bitwise

 #include int main() ( printf("Output = %d",~35); printf("Output = %d",~-12); return 0; ) 

Παραγωγή

 Έξοδος = -36 Έξοδος = 11

Shift Operators στον προγραμματισμό C

There are two shift operators in C programming:

  • Right shift operator
  • Left shift operator.

Right Shift Operator

Right shift operator shifts all bits towards right by certain number of specified bits. It is denoted by>>.

 212 = 11010100 (In binary) 212>>2 = 00110101 (In binary) (Right shift by two bits) 212>>7 = 00000001 (In binary) 212>>8 = 00000000 212>>0 = 11010100 (No Shift) 

Left Shift Operator

Left shift operator shifts all bits towards left by a certain number of specified bits. The bit positions that have been vacated by the left shift operator are filled with 0. The symbol of the left shift operator is <<.

 212 = 11010100 (In binary) 212<<1 = 110101000 (In binary) (Left shift by one bit) 212<<0 = 11010100 (Shift by 0) 212<<4 = 110101000000 (In binary) =3392(In decimal)

Example #5: Shift Operators

 #include int main() ( int num=212, i; for (i=0; i>i); printf(""); for (i=0; i<=2; ++i) printf("Left shift by %d: %d", i, num< 
 Right Shift by 0: 212 Right Shift by 1: 106 Right Shift by 2: 53 Left Shift by 0: 212 Left Shift by 1: 424 Left Shift by 2: 848 

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