Τι είναι το C Operator Precedence and Associativity

Ti Einai To C Operator Precedence And Associativity



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

Αυτό το άρθρο παρέχει ένα ολοκληρωμένο σεμινάριο για να σας βοηθήσει να μάθετε σχετικά με τη συσχέτιση και την προτεραιότητα τελεστών στο C.

Προτεραιότητα χειριστή στο C

Προτεραιότητα χειριστή περιγράφει την ακολουθία με την οποία αξιολογούνται αρκετοί τελεστές κατά την αξιολόγηση παραστάσεων. Για παράδειγμα, εάν μια παράσταση έχει τελεστές πρόσθεσης και πολλαπλασιασμού, ποιος πρέπει να αξιολογηθεί πρώτα; Η απάντηση είναι απλή, το C ακολουθεί ορισμένους κανόνες για να επιλύσει μια τέτοια ασάφεια, κοινώς γνωστή ως προτεραιότητα χειριστή . Σε Γ, προτεραιότητα χειριστή ταξινομείται σε 17 επίπεδα, που κυμαίνονται από μονομερείς τελεστές έως τον τριαδικό τελεστή υπό όρους. Οι πιο χρησιμοποιούμενοι τελεστές όπως αριθμητικοί τελεστές, σχεσιακόι τελεστές, λογικοί τελεστές και τελεστές bitwise ακολουθούν το πρότυπο C προτεραιότητα χειριστή πρωτόκολλο.







Προβάδισμα Οι κανόνες υπαγορεύουν ποιοι τελεστές έχουν μεγαλύτερη προτεραιότητα από άλλους κατά την αξιολόγηση παραστάσεων. Αρκετοί τύποι τελεστών στη γλώσσα προγραμματισμού C έχουν διαφορετικούς βαθμούς προβάδισμα . Για παράδειγμα, οι μονομερείς τελεστές έχουν μεγαλύτερη προτεραιότητα από τους δυαδικούς τελεστές. Ακολουθεί μια λίστα τελεστών ταξινομημένων κατά αύξουσα σειρά προβάδισμα :



Χειριστής Έννοια του χειριστή Συνεταιρισμός
()
[]
->
.
Λειτουργική κλήση

Αναφορά στοιχείου πίνακα



Έμμεση επιλογή μέλους





Άμεση επιλογή μέλους

Από αριστερά προς τα δεξιά
!
~
+

++

&
*
μέγεθος του
(τύπος)
Λογική άρνηση

Συμπλήρωμα bitwise (1's).

Unary plus

Unary μείον

Αύξηση

Μείωση

Παραπομπή (Διεύθυνση)

Αναφορά δείκτη

Επιστρέφει το μέγεθος ενός αντικειμένου

Typecast (μετατροπή)

Δεξιά προς τα αριστερά
*
/
%
Πολλαπλασιάζω

διαιρέστε

Υπόλοιπο

Από αριστερά προς τα δεξιά
+
Binary plus (Προσθήκη)

Δυαδικό μείον (αφαίρεση)

Από αριστερά προς τα δεξιά
<<
>>
Αριστερά μετατόπιση

Δεξιά μετατόπιση

Από αριστερά προς τα δεξιά
<
<=
>
>=
Λιγότερο από

Λιγότερο ή ίσο

Μεγαλύτερος από

Μεγαλύτερο ή ίσο

Από αριστερά προς τα δεξιά
==
!=
Ισο με

Οχι ίσο με

Από αριστερά προς τα δεξιά
& Bitwise ΚΑΙ Από αριστερά προς τα δεξιά
^ Bitwise αποκλειστικό OR Από αριστερά προς τα δεξιά
| Bitwise Ή Από αριστερά προς τα δεξιά
&& Λογικό ΚΑΙ Από αριστερά προς τα δεξιά
|| Λογικό Ή Από αριστερά προς τα δεξιά
?: Υπό όρους χειριστή Δεξιά προς τα αριστερά
=
*=
/=
%=
+=
-=
&=
^=
|=
<<=
>>=
Απλή ανάθεση

Εκχώρηση προϊόντος

Εκχωρήστε πηλίκο

Εκχωρήστε το υπόλοιπο

Εκχώρηση αθροίσματος

Εκχωρήστε διαφορά

Εκχώρηση bitwise AND

Αντιστοίχιση bitwise XOR

Εκχώρηση bitwise OR

Εκχώρηση αριστερής βάρδιας

Εκχωρήστε δεξιά μετατόπιση

Δεξιά προς τα αριστερά
, Διαχωριστής εκφράσεων Από αριστερά προς τα δεξιά

Αυτοί οι κανόνες καθοδηγούν τον μεταγλωττιστή για τον τρόπο αξιολόγησης παραστάσεων με πολλούς τελεστές στην ίδια έκφραση. Ο τελεστής πολλαπλασιασμού, για παράδειγμα, έχει μεγαλύτερη προτεραιότητα από τον τελεστή πρόσθεσης στην εξίσωση A + B * C, σύμφωνα με την προβάδισμα κανόνες. Επομένως, ο μεταγλωττιστής θα αξιολογήσει πρώτα την έκφραση B * C πριν προσθέσει το A στο αποτέλεσμα.

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

#include

ενθ κύριος ( ) {

ενθ ένα = 43 , σι = έντεκα , ντο = 16 , ρε = 31 ;

ενθ αποτέλεσμα = ++ ένα * σι -- + ντο / -- ρε ;

printf ( 'a = %d \n ' , ένα ) ;

printf ( 'b = %d \n ' , σι ) ;

printf ( 'c = %d \n ' , ντο ) ;

printf ( 'd = %d \n ' , ρε ) ;

printf ( 'result = %d \n ' , αποτέλεσμα ) ;

ΕΠΙΣΤΡΟΦΗ 0 ;

}

Οι τέσσερις μεταβλητές a, b, c και d, δηλώνονται στον παραπάνω κώδικα και οι αρχικές τους τιμές είναι αντίστοιχα 43, 11, 16 και 31. Στη συνέχεια, εφαρμόζει μια ποικιλία αριθμητικών και τελεστών εκχώρησης σε αυτές τις μεταβλητές σε μια παράσταση. Η παράσταση αυξάνει την τιμή του a χρησιμοποιώντας τον τελεστή προ-αύξησης ++a, πολλαπλασιάζει το αποτέλεσμα με τον τελεστή μετά τη μείωση b–, και στη συνέχεια προσθέτει το αποτέλεσμα στη διαίρεση c με την προ-μειωμένη τιμή του d. (χρησιμοποιώντας τον τελεστή προ-μείωσης –d). Το μεταβλητό αποτέλεσμα χρησιμοποιείται στη συνέχεια για να κρατήσει το συνολικό αποτέλεσμα αυτής της έκφρασης.

Παραγωγή

Συνεταιρισμός στο Γ

Συνεταιρισμός αναφέρεται στη σειρά με την οποία αξιολογούνται οι τελεστές κατά τη διάρκεια μιας έκφρασης με την ίδια προτεραιότητα. Από αριστερά προς τα δεξιά και από δεξιά προς τα αριστερά συνειρμικότητα είναι οι δύο μορφές συσχετισμού στο C. Αν δύο τελεστές έχουν το ίδιο προβάδισμα , αξιολογούνται από αριστερά προς τα δεξιά σύμφωνα με την έννοια του από αριστερά προς τα δεξιά συνειρμικότητα . Ωστόσο, εάν τηρηθεί η ίδια προτεραιότητα, οι τελεστές αξιολογούνται από δεξιά προς τα αριστερά σύμφωνα με τα δεξιά προς τα αριστερά συνειρμικότητα .

Για παράδειγμα, ο τελεστής αύξησης ++ έχει από δεξιά προς τα αριστερά συνειρμικότητα , που σημαίνει την προσαύξηση χειριστής αξιολογείται μετά τη μεταβλητή. Ενώ το λογικό ΚΑΙ χειριστής έχει από αριστερά προς τα δεξιά συνειρμικότητα , που σημαίνει ότι ο χειριστής αξιολογείται από αριστερά προς τα δεξιά.

#include

int main() {

int a = 6 , β = 3 , γ = 2 ;

int αποτέλεσμα = a * b / c;

printf( 'result = %d \n ' , αποτέλεσμα)·

ΕΠΙΣΤΡΟΦΗ 0 ;

}

Οι τρεις μεταβλητές a, b και c δηλώνονται σε αυτόν τον κώδικα και αρχικοποιούνται σε 6, 3 και 2 αντίστοιχα. Στη συνέχεια, εφαρμόζει πράξεις πολλαπλασιασμού και διαίρεσης σε αυτές τις μεταβλητές σε μια παράσταση. Ο πολλαπλασιασμός και η διαίρεση κατατάσσονται από αριστερά προς τα δεξιά στο C με βάση τους συνειρμικότητα καθώς έχουν το ίδιο επίπεδο προτεραιότητας. Αυτό δείχνει ότι η λειτουργία διαίρεσης έρχεται πρώτη, ακολουθούμενη από την πράξη πολλαπλασιασμού κατά την αξιολόγηση της έκφρασης, a * b / c.

Παραγωγή

συμπέρασμα

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