C # Bitwise Operators: AND, OR, XOR, Συμπλήρωση και Shift Operations

Σε αυτό το σεμινάριο, θα μάθουμε λεπτομερώς για τους τελεστές bitwise και bit shift στο C #. Το C # παρέχει τελεστές 4 bit και 2 bit shift.

Οι τελεστές bitwise και bit shift χρησιμοποιούνται για την εκτέλεση λειτουργιών επιπέδου bit σε ακέραια (int, long, κλπ) και boolean δεδομένα. Αυτοί οι χειριστές δεν χρησιμοποιούνται συνήθως σε καταστάσεις πραγματικής ζωής.

Εάν ενδιαφέρεστε να εξερευνήσετε περισσότερα, επισκεφθείτε πρακτικές εφαρμογές bitwise.

Οι τελεστές bitwise και bit shift που διατίθενται στο C # παρατίθενται παρακάτω.

Λίστα χειριστών C # Bitwise
Χειριστής Όνομα χειριστή
~ Συμπλήρωμα Bitwise
& Bitwise ΚΑΙ
| Bitwise Ή
^ Bitwise Exclusive Ή (XOR)
<< Bitwise Left Shift
>> Bitwise Right Shift

Bitwise Ή

Ο τελεστής bitwise OR αντιπροσωπεύεται από |. Εκτελεί λειτουργία bitwise Ή στα αντίστοιχα bits των δύο τελεστών. Εάν ένα από τα δυαδικά ψηφία είναι 1, το αποτέλεσμα είναι 1. Διαφορετικά το αποτέλεσμα είναι 0.

Εάν οι τελεστές είναι τύπου bool, η λειτουργία bitwise OR ισοδυναμεί με λογική λειτουργία OR μεταξύ τους.

Για παράδειγμα,

 14 = 00001110 (In Binary) 11 = 00001011 (In Binary)

ORΛειτουργία bitwise μεταξύ 14 και 11:

 00001110 00001011 -------- 00001111 = 15 (με δεκαδικό)

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

 using System; namespace Operator ( class BitWiseOR ( public static void Main(string() args) ( int firstNumber = 14, secondNumber = 11, result; result = firstNumber | secondNumber; Console.WriteLine("(0) | (1) = (2)", firstNumber, secondNumber, result); ) ) ) 

Όταν εκτελούμε το πρόγραμμα, η έξοδος θα είναι:

14 | 11 = 15

Bitwise ΚΑΙ

Ο τελεστής Bitwise AND αντιπροσωπεύεται από &. Εκτελεί λειτουργία bitwise AND στα αντίστοιχα bits των δύο τελεστών. Εάν ένα από τα δυαδικά ψηφία είναι 0, το αποτέλεσμα είναι 0. Διαφορετικά το αποτέλεσμα είναι 1.

Εάν οι τελεστές είναι τύπου bool, η λειτουργία bitwise AND είναι ισοδύναμη με τη λογική λειτουργία AND μεταξύ τους.

Για παράδειγμα,

 14 = 00001110 (In Binary) 11 = 00001011 (In Binary)

Λειτουργία Bitwise AND μεταξύ 14 και 11:

 00001110 00001011 -------- 00001010 = 10 (με δεκαδικό)

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

 using System; namespace Operator ( class BitWiseAND ( public static void Main(string() args) ( int firstNumber = 14, secondNumber = 11, result; result = firstNumber & secondNumber; Console.WriteLine("(0) & (1) = (2)", firstNumber, secondNumber, result); ) ) ) 

Όταν εκτελούμε το πρόγραμμα, η έξοδος θα είναι:

 14 & 11 = 10

Bitwise XOR

Ο τελεστής Bitwise XOR αντιπροσωπεύεται από ^. Εκτελεί λειτουργία XOR bitwise στα αντίστοιχα bits των δύο τελεστών. Εάν τα αντίστοιχα bits είναι ίδια , το αποτέλεσμα είναι 0. Εάν τα αντίστοιχα bits είναι διαφορετικά , το αποτέλεσμα είναι 1.

Εάν οι τελεστές είναι τύπου bool, η λειτουργία XOR με bitwise ισοδυναμεί με λογική λειτουργία XOR μεταξύ τους.

Για παράδειγμα,

 14 = 00001110 (In Binary) 11 = 00001011 (In Binary)

Λειτουργία Bitwise XOR μεταξύ 14 και 11:

 00001110 00001011 -------- 00000101 = 5 (με δεκαδικό)

Αν θέλετε να μάθετε περισσότερα σχετικά με τη χρήση του Bitwise XOR, επισκεφθείτε το The Magic of XOR

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

 using System; namespace Operator ( class BitWiseXOR ( public static void Main(string() args) ( int firstNumber = 14, secondNumber = 11, result; result = firstNumber^secondNumber; Console.WriteLine("(0) (1) = (2)", firstNumber, secondNumber, result); ) ) ) 

Όταν εκτελούμε το πρόγραμμα, η έξοδος θα είναι:

 14 11 = 5

Συμπλήρωμα Bitwise

Ο τελεστής Bitwise Complement εκπροσωπείται από τον ~. Είναι ένας ενιαίος χειριστής, δηλαδή λειτουργεί μόνο σε έναν τελεστή. Ο ~χειριστής αντιστρέφει κάθε bit, δηλαδή οι αλλαγές 1 σε 0 και 0 σε 1.

Για παράδειγμα,

 26 = 00011010 (Σε δυαδικό)

Λειτουργία συμπληρώματος Bitwise στις 26:

 ~ 00011010 = 11100101 = 229 (με δεκαδικό)

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

 using System; namespace Operator ( class BitWiseComplement ( public static void Main(string() args) ( int number = 26, result; result = ~number; Console.WriteLine("~(0) = (1)", number, result); ) ) ) 

Όταν εκτελούμε το πρόγραμμα, η έξοδος θα είναι:

 ~ 26 = -27

Έχουμε - 27ως έξοδος όταν περιμέναμε 229. Γιατί συνέβη αυτό;

Συμβαίνει επειδή η δυαδική τιμή 11100101που αναμένουμε να 229είναι στην πραγματικότητα μια παράσταση 2 του συμπληρώματος -27. Οι αρνητικοί αριθμοί στον υπολογιστή αντιπροσωπεύονται στην αναπαράσταση συμπληρώματος 2.

Για οποιοδήποτε ακέραιο n, το συμπλήρωμα 2 nθα είναι -(n+1).

Συμπλήρωμα 2
Δεκαδικός Δυάδικος Συμπλήρωμα 2
0 00000000 - (11111111 + 1) = -00000000 = -0 (με δεκαδικό)
1 00000001 - (11111110 + 1) = -11111111 = -256 (σε δεκαδικό)
229 11100101 - (00011010 + 1) = -00011011 = -27

Οι τιμές υπερχείλισης αγνοούνται στο συμπλήρωμα 2.

Το συμπλήρωμα bitwise του 26είναι 229 (σε δεκαδικό) και το συμπλήρωμα του 2 229είναι -27. Εξ ου και η έξοδος είναι -27αντί 229.

Bitwise Left Shift

Ο τελεστής αριστεράς αλλαγής bitwise αντιπροσωπεύεται από <<. Ο <<χειριστής μετατοπίζει έναν αριθμό προς τα αριστερά από έναν καθορισμένο αριθμό bit. Τα μηδενικά προστίθενται στα λιγότερο σημαντικά bit.

Στο δεκαδικό, είναι ισοδύναμο με

 αριθμός * 2bits

Για παράδειγμα,

 42 = 101010 (σε δυαδικό)

Λειτουργία Bitwise Lift Shift στο 42:

 42 << 1 = 84 (Σε δυαδικό 1010100) 42 << 2 = 168 (Σε δυαδικό 10101000) 42 << 4 = 672 (Σε δυαδικό 1010100000)

Παράδειγμα 5: Bitwise Left Shift

 using System; namespace Operator ( class LeftShift ( public static void Main(string() args) ( int number = 42; Console.WriteLine("(0)<<1 = (1)", number, number<<1); Console.WriteLine("(0)<<2 = (1)", number, number<<2); Console.WriteLine("(0)<<4 = (1)", number, number<<4); ) ) ) 

Όταν εκτελούμε το πρόγραμμα, η έξοδος θα είναι:

 42 << 1 = 84 42 << 2 = 168 42 << 4 = 672

Bitwise Right Shift

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

Στο δεκαδικό, είναι ισοδύναμο με

 δάπεδο (αριθμός / 2bits)

Για παράδειγμα,

 42 = 101010 (σε δυαδικό)

Λειτουργία Bitwise Lift Shift στο 42:

 42 >> 1 = 21 (Σε δυαδικό 010101) 42 >> 2 = 10 (Σε δυαδικό 001010) 42 >> 4 = 2 (Σε δυαδικό 000010)

Παράδειγμα 6: Bitwise Right Shift

 using System; namespace Operator ( class LeftShift ( public static void Main(string() args) ( int number = 42; Console.WriteLine("(0)>>1 = (1)", number, number>>1); Console.WriteLine("(0)>>2 = (1)", number, number>>2); Console.WriteLine("(0)>>4 = (1)", number, number>>4); ) ) ) 

Όταν εκτελούμε το πρόγραμμα, η έξοδος θα είναι:

 42 >> 1 = 21 42 >> 2 = 10 42 >> 4 = 2

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