Ετικέτες: C λογικοί τελεστές, λογική άρνηση, λογική ΟΧΙ, !, λογική OR, λογική πρόσθεση, OR, λογικός πολλαπλασιασμός, λογική ΚΑΙ, ΚΑΙ, σειρά εκτέλεσης λογικών τελεστών

Λογικοί τελεστές

Οι τελεστές Boole είναι τελεστές που λαμβάνουν δυαδικές τιμές (false ή true) ως ορίσματα και επιστρέφουν boolean. Όπως οι συνηθισμένοι τελεστές, μπορούν να είναι μονοθέσιοι (μοναδικοί, δηλαδή, να πάρουν ένα όρισμα), δύο θέσεων (δυαδικοί, πάρτε δύο ορίσματα), τριπλοί και ούτω καθεξής.

Ένα χαρακτηριστικό της γλώσσας C είναι ότι δεν έχει τύπο που αποθηκεύει μια boolean τιμή (false ή true). Στο C, ο ακέραιος αριθμός 0 θεωρείται ψευδής (λογικό μηδέν) και οποιοσδήποτε μη μηδενικός ακέραιος θα είναι λογική αλήθεια. Για παράδειγμα

#περιλαμβάνω #περιλαμβάνω void main() (char boolValue = -71; if (boolValue) (​printf("boolValue is true"); ) else (printf("boolValue is false"); ) _getch();)

Οι τιμές Boole συνήθως δημιουργούνται από τελεστές σύγκρισης (==, !=, >,<, >=. <=).

Η γλώσσα C έχει τρεις λογικούς τελεστές: AND, OR και NOT. Ας ξεκινήσουμε με το πιο απλό

Λογική άρνηση

Ο τελεστής NOT χρησιμοποιείται για την αντιστροφή της τιμής ενός ορίσματος. Δηλαδή, αν του δόθηκε η αλήθεια, τότε θα επιστρέψει ένα ψέμα, αν έλαβε ένα ψέμα ως επιχείρημα, τότε θα επιστρέψει την αλήθεια.

Λογικός τελεστής ΟΧΙ
Χ ΟΧΙ Χ
0 1
1 0

Στο C, η άρνηση αντιπροσωπεύεται από τον τελεστή !. Για παράδειγμα

#περιλαμβάνω #περιλαμβάνω void main() ( int i = 0; if (i) ( printf("i is true\n"); ) if (!i) ( printf("i is not true\n"); ) if (!! i) ( printf("i not is not true\n"); ) if (!!!i) ( printf("i is not is not true\n"); ) _getch(); )

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

λογικό ΚΑΙ

Ο τελεστής AND (AND, λογικός πολλαπλασιασμός) επιστρέφει true εάν και μόνο εάν και τα δύο ορίσματα είναι αληθή.


Λογικός τελεστής AND
Χ Υ Χ ΚΑΙ Υ
0 0 0
0 1 0
1 0 0
1 1 1

Στο C, ο λογικός πολλαπλασιασμός αντιπροσωπεύεται από τον τελεστή &&. Για παράδειγμα, το καθήκον είναι ότι μόνο ενήλικες άνδρες πολίτες επιτρέπεται να μπαίνουν στον κύκλο των στρατιωτικών διαστημοπλοίων. Δηλαδή, μόνο ένας για τον οποίο ισχύουν και οι δύο προϋποθέσεις ταυτόχρονα μπορεί να γίνει αιτών.

#περιλαμβάνω void main() ( char gender; unsigned int age; printf("Enter gender ("M" or "F")\n"); scanf("%c", &gender); printf("Enter age\n") ; scanf("%u", &age); if (gender == "M" && ηλικία > 17) ( printf("Καλώς ορίσατε"); ) else ( printf("Go away"); ) _getch(); )

Ο τελεστής AND μπορεί να εφαρμοστεί διαδοχικά σε πολλαπλά ορίσματα. Σε αυτήν ισχύουν συνειρμικοί και αντικαταστατικοί νόμοι. Θα βελτιώσουμε το πρόγραμμα, θα εισαγάγουμε επίσης ανάπτυξη:

#define _CRT_SECURE_NO_WARNINGS #include #περιλαμβάνω void main() ( char gender; unsigned int age; unsigned int height; printf("Enter gender ("M" or "F")\n"); scanf("%c", &gender); printf("Enter age \n"); scanf("%u", &ηλικία); printf("Εισαγάγετε ύψος\n"); scanf("%u", &ύψος); if (φύλο == "M" && ηλικία > 17 && ύψος > = 180) ( printf("Καλώς ήρθες"); ) else ( printf("Go away"); ) _getch(); )

Επίσης, η συνθήκη θα μπορούσε να γραφτεί

(φύλο == "M" && ηλικία > 17) && ύψος >= 180

Φύλο == "M" && (ηλικία > 17 && ύψος >= 180)

(ηλικία > 17 && ύψος >= 180) && φύλο == "M"

Λογικό Ή

Ο λογικός τελεστής OR (λογική προσθήκη, OR) είναι αληθής όταν τουλάχιστον ένα από τα ορίσματά του είναι αληθές.


Λογικός τελεστής OR
Χ Υ Χ Ή Υ
0 0 0
0 1 1
1 0 1
1 1 1

Στο C, το OR αντιπροσωπεύεται από τον τελεστή ||. Για παράδειγμα, ας βελτιώσουμε το πρόγραμμα: τώρα το φύλο μπορεί να εισαχθεί τόσο με κεφαλαία όσο και με μικρά γράμματα

#define _CRT_SECURE_NO_WARNINGS #include #περιλαμβάνω void main() ( char genderInput; char gender; "Enter age\n"); scanf("%u", &age); printf("Enter height\n"); scanf("%u", &height); if (genderInput == "M" || genderInput = = "m") ( φύλο = 1; ) else ( φύλο = 0; ) αν ((ηλικία > 17 && ύψος >= 180) && φύλο) ( printf("Καλώς ορίσατε"); ) else ( printf("Φύγε" ); ) _getch(); )

Όπως και με τον τελεστή AND, το OR είναι μεταθετικό και συσχετιστικό.

Οι χειριστές μπορούν να αναμειχθούν μεταξύ τους, δημιουργώντας σύνθετους χειριστές

#define _CRT_SECURE_NO_WARNINGS #include #περιλαμβάνω void main() ( char gender; unsigned int age; unsigned int height; printf("Enter gender ("M" or "F")\n"); scanf("%c", &gender); printf("Enter age \n"); scanf("%u", &ηλικία); printf("Εισαγάγετε ύψος\n"); scanf("%u", &ύψος); if ((ηλικία > 17 && ύψος >= 180) && (φύλο == "M" || φύλο == "m")) ( printf("Καλώς ήρθες"); ) else ( printf("Go away"); ) _getch(); )

Αρκεί να θυμόμαστε ότι ο τελεστής άρνησης έχει υψηλότερη προτεραιότητα από AND ή OR, επομένως θα εκτελεστεί πρώτος. Εάν υπάρχει μια κατάσταση όπου η εντολή εκτέλεσης δεν είναι σαφής, ορίστε την με παρενθέσεις.

Παράδειγμα: Ο νόμος του De Morgan. Για να αλλάξετε AND σε OR (ή αντίστροφα), πρέπει να αντιστρέψετε τις τιμές όλων των τελεστών, να αντικαταστήσετε το AND με OR (ή OR με AND) και να αντιστρέψετε το τελικό αποτέλεσμα. Στην περίπτωση της κατάστασής μας

(ηλικία > 17 && ύψος >= 180) && (φύλο == "M" || φύλο == "m")

Σκεφτείτε πρώτα το κομμάτι

(ηλικία > 17 && ύψος >= 180)

Αντιστρέψτε όλες τις τιμές

(!(ηλικία > 17) && !(ύψος >= 180))

αντικαταστήστε τον τελεστή && με ||

(!(ηλικία > 17) || !(ύψος >= 180))

και αντιστρέψτε την απάντηση

!(!(ηλικία > 17) || !(ύψος >= 180))

Όπως μπορείτε να δείτε, το αποτέλεσμα είναι το ίδιο. Είναι προφανές ότι

!(ηλικία > 17)

ισοδυναμεί με

Ηλικία<= 17

Έτσι, αλλάζουμε τη συνθήκη

!(ηλικία<= 17 || height < 180)

Αλλάξτε το δεύτερο στήριγμα με τον ίδιο τρόπο

(φύλο == "M" || φύλο == "m")

!(φύλο != "Μ" && φύλο != "μ")

!(ηλικία<= 17 || height < 180) && !(gender != "M" && gender != "m")

Τώρα μπορούμε να εφαρμόσουμε τον ίδιο κανόνα για ολόκληρη την έκφραση

!((ηλικία<= 17 || height < 180) || (gender != "M" && gender != "m"))

Σειρά εκτέλεσης λογικών τελεστών

Σκεφτείτε την έκφραση

Α Β Γ Δ

όπου a, b, c, d είναι τιμές boolean. Ολόκληρη η έκφραση είναι αληθής αν και μόνο αν όλοι οι τελεστές είναι αληθείς. Εάν τουλάχιστον ένας από τους τελεστές είναι ψευδής, τότε οι υπόλοιποι δεν είναι πλέον σημαντικοί. Επομένως, για να βελτιστοποιηθεί η απόδοση, ο υπολογισμός προχωρά από αριστερά προς τα δεξιά και σταματά μόλις βρεθεί ο πρώτος μηδενικός τελεστής.

Στο C, ένας τελεστής εκχώρησης μπορεί να επιστρέψει μια τιμή. Μερικές φορές χρησιμοποιείται απευθείας σε μια κατάσταση:

#define _CRT_SECURE_NO_WARNINGS #include #περιλαμβάνω #περιλαμβάνω void main() ( int a = 0; int *p = if (a && (p = (int*) malloc(sizeof(int) * 2))) ( printf("διατέθηκε η μνήμη"); ) δωρεάν(p ); _getch(); )

Σε αυτήν την περίπτωση, ο τελεστής malloc δεν θα εκτελεστεί επειδή ο πρώτος τελεστής a είναι 0 (αντίστοιχα, ολόκληρη η παράσταση είναι μηδέν). Έτσι, ο ελεύθερος χειριστής θα προσπαθήσει να καθαρίσει τη μνήμη που δεν μπορεί να διαγράψει (επειδή το p θα συνεχίσει να αναφέρεται στο a). Αν αλλάξουμε a = 1, τότε όλα θα λειτουργήσουν χωρίς προβλήματα.

Το ίδιο συμβαίνει κατά την εκτέλεση του ||. Εκφραση

Α || β || γ || ρε

τρέχει από αριστερά προς τα δεξιά μέχρι να συναντήσει την πρώτη μη μηδενική τιμή. Μετά από αυτό, η εκτέλεση σταματά, αφού είναι γνωστό ότι ολόκληρη η έκφραση είναι ίση με true.

Διάφορες λειτουργίες μπορούν να εκτελεστούν σε αντικείμενα στη γλώσσα C:

  • εργασίες ανάθεσης·
  • Λειτουργίες σχέσεων·
  • αριθμητική;
  • σπαζοκεφαλιά;
  • λειτουργίες βάρδιας.

Το αποτέλεσμα της επέμβασης είναι ένας αριθμός.

Οι πράξεις μπορεί να είναι δυαδικές ή μονομερείς.
Οι δυαδικές πράξεις εκτελούνται σε δύο αντικείμενα, οι μοναδιασικές πράξεις σε ένα.

λειτουργία ανάθεσης

Η λειτουργία ανάθεσης συμβολίζεται με το σύμβολο = και εκτελείται σε 2 στάδια:

  • αξιολογείται η έκφραση στη δεξιά πλευρά.
  • το αποτέλεσμα εκχωρείται στον τελεστή στην αριστερή πλευρά:

αντικείμενο = έκφραση;

Παράδειγμα:

int a = 4; // στη μεταβλητή a εκχωρείται η τιμή 4
intb;
b = a + 2; // στη μεταβλητή b εκχωρείται η τιμή 6 που υπολογίζεται στη δεξιά πλευρά

Εάν τα αντικείμενα στο αριστερό και το δεξί τμήμα της λειτουργίας εκχώρησης έχουν διαφορετικούς τύπους, χρησιμοποιείται μια λειτουργία μετατροπής ρητού τύπου.
αντικείμενο = (τύπος)έκφραση;

Παράδειγμα:

float a = 241,5;
// Πριν υπολογιστεί το υπόλοιπο της διαίρεσης, το a μετατρέπεται σε ακέραιο τύπο
int b = (int )a % 2; // b = 1

πράξεις σχέσης

Βασικές πράξεις σχέσεων:

  • == ισοδύναμο - έλεγχος για ισότητα.
  • != όχι ίσο - ελέγξτε για ανισότητα.
  • < πιο λιγο;
  • > περισσότερο;
  • <= λιγότερο ή ίσο?
  • >= περισσότερο ή ίσο.

Οι σχεσιακές πράξεις χρησιμοποιούνται για την οργάνωση συνθηκών και κλάδων. Το αποτέλεσμα αυτών των πράξεων είναι 1 bit, η τιμή του οποίου είναι 1 εάν το αποτέλεσμα της πράξης είναι αληθές και 0 εάν το αποτέλεσμα της πράξης είναι ψευδές.

Αριθμητικές πράξεις

Βασικές δυαδικές πράξεις, ταξινομημένες κατά φθίνουσα σειρά προτεραιότητας:

  • * - πολλαπλασιασμός
  • / - διαίρεση
  • + - πρόσθεση;
  • - αφαίρεση?
  • % είναι το υπόλοιπο μιας διαίρεσης ακέραιου αριθμού.

Βασικές ενιαίες πράξεις:

  • ++ - αύξηση (αύξηση κατά 1).
  • -- - μείωση (μείωση κατά 1).
  • - αλλαγή πινακίδας.

Το αποτέλεσμα της αξιολόγησης μιας παράστασης που περιέχει πράξεις αύξησης ή μείωσης εξαρτάται από το πού βρίσκεται το πρόσημο της πράξης (πριν ή μετά από το αντικείμενο). Εάν η λειτουργία βρίσκεται πριν από το αντικείμενο, τότε η τιμή της μεταβλητής αλλάζει πρώτα σε 1 και, στη συνέχεια, αυτή η τιμή χρησιμοποιείται για την εκτέλεση των παρακάτω λειτουργιών. Εάν η επέμβαση ++ ή βρίσκεται μετά τη μεταβλητή, μετά εκτελείται πρώτα η λειτουργία και, στη συνέχεια, η τιμή της μεταβλητής αλλάζει σε 1.

Παράδειγμα :

Οι δυαδικές αριθμητικές πράξεις μπορούν να συνδυαστούν με τον τελεστή εκχώρησης:

  • αντικείμενο *= έκφραση; // αντικείμενο = αντικείμενο * έκφραση
  • αντικείμενο /= έκφραση; // αντικείμενο = αντικείμενο / έκφραση
  • αντικείμενο += έκφραση; // αντικείμενο = αντικείμενο + έκφραση
  • αντικείμενο -= έκφραση; // αντικείμενο = αντικείμενο - έκφραση
  • αντικείμενο %= έκφραση; // αντικείμενο = έκφραση αντικειμένου %

Λειτουργίες Boolean

Οι λογικές πράξεις χωρίζονται σε δύο ομάδες:

  • υποθετικός;
  • δυαδικά.

Οι λογικές πράξεις υπό όρους χρησιμοποιούνται συχνότερα σε λειτουργίες ελέγχου κατάστασης αν και μπορούν να εκτελεστούν σε οποιοδήποτε αντικείμενο. Αποτέλεσμα της υπό όρους λειτουργίας boolean:

  • 1 εάν η έκφραση είναι αληθής.
  • 0 αν η έκφραση είναι ψευδής.

Γενικά, όλες οι μη μηδενικές τιμές ερμηνεύονται ως αληθείς από τις δυαδικές πράξεις υπό όρους.

Βασικές λογικές πράξεις υπό όρους:

  • && - Και (δυαδικό) - απαιτείται ταυτόχρονη εκτέλεση όλων των λειτουργιών της σχέσης.
  • || - Ή (δυαδικό) - απαιτείται τουλάχιστον μία πράξη σχέσης.
  • ! - NOT (unary) - απαιτείται μη εκτέλεση της πράξης σχέσης.

Οι λογικές πράξεις bitwise λειτουργούν σε bit, καθένα από τα οποία μπορεί να λάβει μόνο δύο τιμές: 0 ή 1.

Βασικές λογικές πράξεις bitwise στη γλώσσα C:

  • & σύνδεσμος (λογικό ΚΑΙ) - μια δυαδική πράξη, το αποτέλεσμα της οποίας είναι 1 μόνο όταν και οι δύο τελεστές είναι απλοί (στη γενική περίπτωση, όταν όλοι οι τελεστές είναι απλοί).
  • | διαχωρισμός (λογικό OR) - μια δυαδική πράξη, το αποτέλεσμα της οποίας είναι 1 όταν τουλάχιστον ένας από τους τελεστές είναι 1.
  • ~ Η αντιστροφή (λογικό ΟΧΙ) είναι μια μονομερής πράξη, το αποτέλεσμα της οποίας είναι 0 εάν ο τελεστής είναι απλός και είναι 1 εάν ο τελεστής είναι μηδέν.
  • ^ Το XOR είναι μια δυαδική πράξη της οποίας το αποτέλεσμα είναι 1 εάν μόνο ένας από τους δύο τελεστές είναι 1 (γενικά, εάν υπάρχει περιττός αριθμός 1 στο σύνολο εισόδου των τελεστών).

Για κάθε bit, το αποτέλεσμα της λειτουργίας θα ληφθεί σύμφωνα με τον πίνακα.

ένα σι α&β α | σι α^β
0 0 0 0 1 0
0 1 0 1 1 1
1 0 0 1 0 1
1 1 1 1 0 0

Παράδειγμα :

1
2
3
4
5
6
7

ανυπόγραφο char a = 14; // a = 0000 1110
ανυπόγραφο char b = 9; // b = 0000 1001
ανυπόγραφο char c, d, e, f;
c = a&b; // c = 8 = 0000 1000
d = a | σι; // d = 15 = 0000 1111
e = ~a; // e = 241 = 1111 0001
f = a^b; // f = 7 = 0000 0111


Οι λειτουργίες bitwise σάς επιτρέπουν να ορίσετε και να επαναφέρετε μεμονωμένα bits ενός αριθμού. Για το σκοπό αυτό χρησιμοποιείται κάλυψη bit. Οι μάσκες που αντιστοιχούν στη ρύθμιση κάθε bit σε ένα byte παρουσιάζονται στον πίνακα

Κομμάτι Μάσκα
0 0x01
1 0x02
2 0x04
3 0x08
4 0x10
5 0x20
6 0x40
7 0x80

Για να ορίσετε ένα συγκεκριμένο bit, πρέπει να ορίσετε το αντίστοιχο bit της μάσκας σε 1 και να εκτελέσετε μια λειτουργία λογικής OR κατά bit με μια σταθερά που αντιπροσωπεύει τη μάσκα.

Τελευταία ενημέρωση: 19/06/2017

Ένα ξεχωριστό σύνολο πράξεων αντιπροσωπεύει εκφράσεις υπό όρους. Τέτοιες πράξεις επιστρέφουν μια δυαδική τιμή, δηλαδή μια τιμή τύπου bool : true αν η έκφραση είναι true και false αν η έκφραση είναι false. Αυτές οι πράξεις περιλαμβάνουν πράξεις σύγκρισης και λογικές πράξεις.

Λειτουργίες σύγκρισης

Οι τελεστές σύγκρισης συγκρίνουν δύο τελεστές και επιστρέφουν μια τιμή bool - true αν η παράσταση είναι true και false αν η παράσταση είναι false.

    Συγκρίνει δύο τελεστές για ισότητα. Εάν είναι ίσα, τότε η πράξη επιστρέφει true, αν όχι ίση, τότε επιστρέφεται false:

    ΣΙ; // ψευδής

    Συγκρίνει δύο τελεστές και επιστρέφει true αν οι τελεστές δεν είναι ίσοι και false αν είναι ίσοι.

    int a = 10; int b = 4; bool c = a != b; // true bool d = a!=10; // ψευδής

    Λιγότερο από τη λειτουργία. Επιστρέφει true αν ο πρώτος τελεστής είναι μικρότερος από τον δεύτερο και false αν ο πρώτος τελεστής είναι μεγαλύτερος από τον δεύτερο:

    int a = 10; int b = 4; bool c = α< b; // false

    Λειτουργία «μεγαλύτερη από». Συγκρίνει δύο τελεστές και επιστρέφει true αν ο πρώτος τελεστής είναι μεγαλύτερος από τον δεύτερο, διαφορετικά επιστρέφει false:

    int a = 10; int b = 4; bool c = a > b; // true bool d = a > 25; // ψευδής

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

    int a = 10; int b = 4; bool c = α<= b; // false bool d = a <= 25; // true

    Μεγαλύτερη ή ίση με τη λειτουργία. Συγκρίνει δύο τελεστές και επιστρέφει true αν ο πρώτος τελεστής είναι μεγαλύτερος ή ίσος με τον δεύτερο, διαφορετικά επιστρέφει false:

    int a = 10; int b = 4; bool c = a >= b; // true bool d = a >= 25; // ψευδής

Λειτουργίες<, > <=, >= έχουν μεγαλύτερη προτεραιότητα από == και !=.

Λειτουργίες Boolean

Το C# ορίζει επίσης λογικούς τελεστές που επιστρέφουν επίσης μια τιμή bool. Δέχονται τιμές bool ως τελεστές. Συνήθως εφαρμόζεται σε σχέσεις και συνδυάζει πολλαπλές πράξεις σύγκρισης.

    Η λειτουργία της λογικής προσθήκης ή λογικής OR. Επιστρέφει true αν τουλάχιστον ένας από τους τελεστές επιστρέψει true.

    bool x1 = (5 > 6) | (4< 6); // 5 >6 - ψεύτικο, 4< 6 - true, поэтому возвращается true bool x2 = (5 >6) | (4 > 6); // 5 > 6 - ψευδής, 4 >

    Πολλαπλασιασμός Boolean ή λογικός AND. Επιστρέφει true εάν και οι δύο τελεστές είναι αληθείς ταυτόχρονα.

    bool x1 = (5 > 6) & (4< 6); // 5 >6 - ψεύτικο, 4< 6 - true, поэтому возвращается false bool x2 = (5 < 6) & (4 < 6); // 5 < 6 - true, 4 < 6 - true, поэтому возвращается true

    Η λειτουργία της λογικής προσθήκης. Επιστρέφει true αν τουλάχιστον ένας από τους τελεστές επιστρέψει true.

    bool x1 = (5 > 6) || (4< 6); // 5 >6 - ψεύτικο, 4< 6 - true, поэтому возвращается true bool x2 = (5 >6) || (4 > 6); // 5 > 6 είναι false, 4 > 6 είναι false, άρα επιστρέφεται το false

    Η πράξη του λογικού πολλαπλασιασμού. Επιστρέφει true αν και οι δύο τελεστές είναι και οι δύο true.

    bool x1 = (5 > 6) && (4< 6); // 5 >6 - ψεύτικο, 4< 6 - true, поэтому возвращается false bool x2 = (5 < 6) && (4 < 6); // 5 < 6 - true, 4 < 6 - true, поэтому возвращается true

    Λειτουργία λογικής άρνησης. Εκτελείται σε έναν μόνο τελεστή και επιστρέφει true αν ο τελεστής είναι false. Εάν ο τελεστής είναι true, τότε η πράξη επιστρέφει false:

    bool a = αληθές; bool b = !a; // ψευδής

    Αποκλειστική λειτουργία Ή. Επιστρέφει true εάν είτε ο πρώτος είτε ο δεύτερος τελεστής (αλλά όχι και οι δύο) είναι true, διαφορετικά επιστρέφει false

    bool x5 = (5 > 6)^(4< 6); // 5 >6 - ψεύτικο, 4< 6 - true, поэтому возвращается true bool x6 = (50 > 6) ^ (4 / 2 < 3); // 50 >6 - αλήθεια, 4/2< 3 - true, поэтому возвращается false

Εδώ έχουμε δύο ζεύγη πράξεων | και || (καθώς και τα & και &&) εκτελούν παρόμοιες ενέργειες, αλλά δεν είναι ισοδύναμες.

Στην έκφραση z=x|y; θα υπολογιστούν και οι δύο τιμές x και y.

Στην έκφραση z=x||y; πρώτα θα υπολογιστεί η τιμή x και αν είναι ίση με true, τότε ο υπολογισμός της τιμής y δεν έχει πλέον νόημα, αφού σε κάθε περίπτωση έχουμε ήδη z ίσο με true . Η τιμή του y θα εκτιμηθεί μόνο εάν το x είναι false

Το ίδιο ισχύει για το ζεύγος πράξεων &/&&. Στην έκφραση z=x θα υπολογιστούν και οι δύο τιμές - x και y.

Στην παράσταση z=x& θα υπολογιστεί πρώτα η τιμή x και αν είναι ίση με false , τότε ο υπολογισμός της τιμής y δεν έχει πλέον νόημα, αφού σε κάθε περίπτωση έχουμε ήδη z ίσο με false . Η τιμή του y θα εκτιμηθεί μόνο εάν το x είναι αληθές

Επομένως, λειτουργίες || και τα && είναι πιο βολικά στους υπολογισμούς, καθώς σας επιτρέπουν να μειώσετε τον χρόνο που απαιτείται για την αξιολόγηση της τιμής μιας έκφρασης και, ως εκ τούτου, να βελτιώσετε την απόδοση. Και λειτουργίες | και & είναι πιο κατάλληλα για την εκτέλεση πράξεων bitwise σε αριθμούς.

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

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

Πίνακας 2 - λειτουργίες

Σημάδι λειτουργίας

Σκοπός της επέμβασης

Κλήση λειτουργίας

Επιλογή στοιχείου πίνακα

Επισήμανση ενός στοιχείου εγγραφής

Επισήμανση ενός στοιχείου εγγραφής

Λογική άρνηση

Αρνητική κατά bitwise

Αλλαγή πινακίδας

Αύξηση μονάδας

Μείωση κατά ένα

Λήψη διεύθυνσης

Επικοινωνία μέσω διεύθυνσης

Μετατροπή τύπου (δηλαδή (float) α)

Προσδιορισμός του μεγέθους σε byte

Πολλαπλασιασμός

Ορισμός του υπολοίπου της διαίρεσης

Πρόσθεση

Αφαίρεση

Μετατόπιση αριστερά

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

Λιγότερο από

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

Περισσότερο από

Περισσότερο ή ίσο

Λογικό bitwise "AND"

Bitwise XOR

Λογικό bitwise "OR"

Λογική "ΚΑΙ"

Λογικό "OR"

Λειτουργία υπό όρους (τριμερής).

ΑΝΑΘΕΣΗ ΕΡΓΑΣΙΑΣ

+=, - =, *=, /=, %=, <<=,
>>=, &=, |=, ^=

Δυαδικές πράξεις (για παράδειγμα, a *= b
(δηλαδή a = a * b), κ.λπ.)

Κόμμα λειτουργίας

Χειριστής στη γλώσσα C (C)

Για να εξαλειφθεί η σύγχυση στις έννοιες "λειτουργία" και "τελεστής", σημειώνουμε ότι ο χειριστής είναι η μικρότερη εκτελέσιμη μονάδα του προγράμματος. Υπάρχουν τελεστές παραστάσεων των οποίων η δράση είναι να αξιολογούν δεδομένες εκφράσεις (για παράδειγμα: a = sin(b)+c; j++;), τελεστές δήλωσης, σύνθετοι τελεστές, κενοί τελεστές, τελεστές ετικετών, τελεστές κύκλου κ.λπ. Ένα ερωτηματικό χρησιμοποιείται για να επισημάνει το τέλος μιας δήλωσης στο C (C). Μια σύνθετη πρόταση (ή μπλοκ), η οποία είναι ένα σύνολο λογικά σχετικών εντολών που τοποθετούνται μεταξύ ανοιγόμενων (() και κλεισίματος ()) σγουρά στηρίγματα ("αγκύλες χειριστή"), δεν ακολουθείται από ερωτηματικό. Σημειώστε ότι ένα μπλοκ διαφέρει από μια σύνθετη πρόταση από την παρουσία ορισμών στο σώμα του μπλοκ.

Χαρακτηριστικά των βασικών πράξεων της γλώσσας C (C)

Ας χαρακτηρίσουμε τις κύριες λειτουργίες της γλώσσας SI (C).

λειτουργία ανάθεσης

Αρχικά, εξετάστε ένα από αυτά - τον τελεστή εκχώρησης (=). Έκφραση της φόρμας

εκχωρεί την τιμή του x στο y. Ο τελεστής "=" μπορεί να χρησιμοποιηθεί πολλές φορές σε μία έκφραση, για παράδειγμα:

x=y=z=100;

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

Αριθμητικές πράξεις.

Λογικές και σχεσιακές πράξεις.

Λειτουργίες με bits.

Οι αριθμητικές πράξεις καθορίζονται από τα ακόλουθα σύμβολα (Πίνακας 2): +, -, *, /, % . Το τελευταίο από αυτά δεν μπορεί να εφαρμοστεί σε μεταβλητές πραγματικού τύπου. Για παράδειγμα:

a = b + c;
x = y - z;
r = t*v;
s = k / l;
p = q % w;

Λειτουργίες Boolean

Οι λογικές πράξεις μιας σχέσης προσδιορίζονται από τα ακόλουθα σύμβολα (βλ. Πίνακα 2): && ("AND"), || ("Ή"), ! ("ΟΧΙ"), >, >=,<, <= , = = (равно), != (не равно). Традиционно эти операции должны давать одно из двух значений: истину или ложь. В языке СИ (C)принято следующее правило: истина - это любое ненулевое значение; ложь - это нулевое значение. Выражения, использующие логические операции и операции отношения, возвращают 0 для ложного значения и 1 для истинного. Ниже приводится таблица истинности для логических операций.

Οι λειτουργίες bit μπορούν να εφαρμοστούν σε μεταβλητές των τύπων int, char και τις παραλλαγές τους (για παράδειγμα, long int). Δεν μπορούν να εφαρμοστούν σε μεταβλητές τύπων float, double, void (ή πιο πολύπλοκων τύπων). Αυτές οι λειτουργίες καθορίζονται από τα ακόλουθα σύμβολα: ~ (άρνηση bitwise),<< (сдвиг влево), >> (δεξιά μετατόπιση), & (κατά bit AND), ^ (μετατόπιση XOR), | (κατά bit "OR").

Παραδείγματα: αν a=0000 1111 και b=1000 1000 τότε

~a = 1111 0000,
ένα<< 1 = 0001 1110,
a >> 1 = 0000 0111,
a & b = 0000 1000,
a^b=10000111,
α | b = 1000 1111.

Η γλώσσα παρέχει δύο μη συμβατικούς τελεστές αύξησης (++) και μείωσης (--). Έχουν σχεδιαστεί για να αυξάνουν και να μειώνουν κατά ένα την τιμή του τελεστή. Οι τελεστές ++ και -- μπορούν να γραφτούν πριν ή μετά τον τελεστή. Στην πρώτη περίπτωση (++n ή --n), η τιμή του τελεστή (n) αλλάζει πριν χρησιμοποιηθεί στην αντίστοιχη παράσταση και στη δεύτερη περίπτωση (n++ ή n--) αφού χρησιμοποιηθεί. Εξετάστε τις ακόλουθες δύο γραμμές προγράμματος:

a = b + c++;
a1 = b1 + ++c1;

Έστω ότι b = b1 = 2, c = c1 = 4. Στη συνέχεια, αφού εκτελέσουμε τις πράξεις: a = 6, b = 2, c = 5, a1 = 7, b1 = 2, c1 = 5.

Εκφράσεις με μια άλλη μη παραδοσιακή τριμερή ή υπό όρους λειτουργία ?: χρησιμοποιούνται επίσης ευρέως. Στη φόρμουλα

y = a εάν το x δεν είναι μηδέν (δηλαδή αληθές), και y = b εάν το x είναι μηδέν (λάθος). Η ακόλουθη έκφραση

y = (a>b) ? α:β;

σας επιτρέπει να εκχωρήσετε την τιμή μιας μεγαλύτερης μεταβλητής (a ή b) στη μεταβλητή y, δηλ. y = max(a, b).

Μια άλλη διαφορά της γλώσσας είναι ότι μια έκφραση της μορφής a = a + 5; μπορεί να γραφτεί με άλλη μορφή: a += 5;. Αντί για το σύμβολο +, μπορούν επίσης να χρησιμοποιηθούν σύμβολα άλλων δυαδικών πράξεων (βλ. Πίνακα 2).

Άλλες λειτουργίες από τον πίνακα. 2 θα περιγραφεί στις επόμενες παραγράφους.

Οι βρόχοι οργανώνονται για να εκτελούν κάποια δήλωση ή ομάδα εντολών ορισμένες φορές. Υπάρχουν τρεις εντολές βρόχου στη γλώσσα C (C): for, while και do - while. Το πρώτο από αυτά είναι επίσημα γραμμένο ως εξής:

για (έκφραση_1; έκφραση_2; έκφραση_3) βρόχος_σώμα

Το σώμα του βρόχου είναι είτε μία πρόταση είτε πολλές εντολές που περικλείονται σιδερακια ΔΟΝΤΙΩΝ( ... ) (δεν υπάρχει ερωτηματικό μετά το μπλοκ). Οι εκφράσεις 1, 2, 3 περιέχουν μια ειδική μεταβλητή που ονομάζεται μεταβλητή ελέγχου. Με την τιμή του, ορίζεται η ανάγκη επανάληψης του κύκλου ή εξόδου από αυτόν.

Η Expression_1 εκχωρεί την αρχική τιμή της μεταβλητής ελέγχου, η έκφραση_3 την αλλάζει σε κάθε βήμα και η έκφραση_2 ελέγχει εάν έχει φτάσει στην οριακή τιμή που ορίζει την ανάγκη εξόδου από τον βρόχο.

για (i = 1; i< 10; i++)

για (ch = "a"; ch != "p";) scanf ("%c", &ch);

/* Ο βρόχος θα εκτελεστεί μέχρι το πληκτρολόγιο

Ο χαρακτήρας "p" δεν θα εισαχθεί */

Οποιαδήποτε από τις τρεις εκφράσεις στο για βρόχομπορεί να παραλειφθεί, αλλά το ερωτηματικό πρέπει να παραμείνει. Έτσι το for (; ;) (...) είναι ένας άπειρος βρόχος που μπορεί να βγει μόνο με άλλους τρόπους.

Ο ακόλουθος κανόνας υιοθετείται στη γλώσσα SI (C). Οποιαδήποτε έκφραση ανάθεσης που περικλείεται σε παρένθεση έχει την ίδια τιμή με αυτήν που έχει εκχωρηθεί. Για παράδειγμα, η παράσταση (a=7+2) έχει τιμή 9. Μετά από αυτό, μπορείτε να γράψετε μια άλλη έκφραση, για παράδειγμα: ((a=7+2)<10), которое в данном случае будет всегда давать истинное значение. Следующая конструкция:

((ch = getch()) == "i")

σας επιτρέπει να εισαγάγετε την τιμή της μεταβλητής ch και να δώσετε ένα αληθινό αποτέλεσμα μόνο όταν η εισαγόμενη τιμή είναι το γράμμα "i". Σε αγκύλες, μπορείτε να γράψετε πολλούς τύπους που συνθέτουν μια σύνθετη έκφραση. Για τους σκοπούς αυτούς, χρησιμοποιείται η λειτουργία κόμματος. Οι τύποι θα αξιολογηθούν από αριστερά προς τα δεξιά και ολόκληρη η έκφραση θα λάβει την τιμή του τελευταίου τύπου που αξιολογήθηκε. Για παράδειγμα, αν υπάρχουν δύο μεταβλητές τύπου char, τότε η έκφραση

z = (x = y, y = getch());

ορίζει τις ακόλουθες ενέργειες: η τιμή της μεταβλητής y εκχωρείται στη μεταβλητή x. Ένας χαρακτήρας εισάγεται από το πληκτρολόγιο και εκχωρείται στη μεταβλητή y. Το z παίρνει την τιμή του y. Οι παρενθέσεις χρειάζονται εδώ επειδή ο τελεστής κόμματος έχει χαμηλότερη προτεραιότητα από τον τελεστή εκχώρησης που είναι γραμμένος μετά τη μεταβλητή z. Ο τελεστής κόμματος χρησιμοποιείται ευρέως για την κατασκευή παραστάσεων βρόχου και σας επιτρέπει να αλλάζετε τις τιμές πολλών μεταβλητών ελέγχου παράλληλα.

Επιτρέπονται ένθετες κατασκευές, δηλ. το σώμα ενός βρόχου μπορεί να περιέχει άλλες δηλώσεις.

Η δήλωση while είναι επίσημα γραμμένη ως εξής:

ενώ (έκφραση) loop_body

Η παράσταση σε παρένθεση μπορεί να λάβει τιμή μη μηδενική (αληθής) ή μηδενική (ψευδή). Εάν είναι αληθές, τότε εκτελείται το σώμα του βρόχου και η έκφραση αξιολογείται ξανά. Εάν η έκφραση είναι ψευδής, τότε ο βρόχος while τελειώνει.

Η δήλωση do-while γράφεται επίσημα ως εξής:

do (loop_body) while (expression);

Η κύρια διαφορά μεταξύ των βρόχων while και do-while είναι ότι το σώμα σε έναν βρόχο do-while εκτελείται τουλάχιστον μία φορά. Το σώμα του βρόχου θα εκτελεστεί έως ότου η έκφραση σε παρένθεση αξιολογηθεί ως ψευδής. Εάν είναι false κατά την είσοδο στον βρόχο, τότε το σώμα του εκτελείται ακριβώς μία φορά.

Επιτρέπεται η ένθεση μερικών βρόχων σε άλλους, π.χ. Οι δηλώσεις για, while και do-while μπορεί να εμφανίζονται στο σώμα οποιουδήποτε βρόχου.

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

Τελεστές άλματος υπό όρους και άνευ όρων

Για να οργανωθούν άλματα υπό όρους και άνευ όρων σε ένα πρόγραμμα C (C), χρησιμοποιούνται οι ακόλουθες δηλώσεις: if - else, switch και goto. Το πρώτο είναι γραμμένο ως εξής:

if (check_condition) statement_1; else statement_2;

Εάν η συνθήκη στις παρενθέσεις αξιολογηθεί ως true, εκτελείται η εντολή_1, ενώ εάν η συνθήκη είναι false, η εντολή_2. Εάν πρέπει να εκτελεστούν πολλές εντολές αντί για μία, περικλείονται σε σγουρά άγκιστρα. Η δήλωση if μπορεί να μην περιέχει τη λέξη other.

Σε μια δήλωση if - else, οι άλλες δηλώσεις πρέπει να ακολουθούν αμέσως τις λέξεις-κλειδιά if και else. Εάν τουλάχιστον ένα από αυτά είναι μια πρόταση if, ονομάζεται ένθετο. Σύμφωνα με τη σύμβαση της γλώσσας C, η λέξη αλλιώς αναφέρεται πάντα στο πλησιέστερο, εάν αυτό προηγείται.

Η δήλωση διακόπτη σάς επιτρέπει να επιλέξετε μία από τις πολλές εναλλακτικές. Είναι γραμμένο με την ακόλουθη επίσημη μορφή:

διακόπτης (έκφραση)

περίπτωση σταθερά_1: δηλώσεις_1;

περίπτωση σταθερά_2: δηλώσεις_2;

........ ........

προεπιλογή: operators_default;

Αυτό αξιολογεί την τιμή ολόκληρης της παράστασης σε παρένθεση (μερικές φορές ονομάζεται επιλογέας) και τη συγκρίνει με όλες τις σταθερές (σταθερές εκφράσεις). Όλες οι σταθερές πρέπει να είναι διαφορετικές. Εάν υπάρχει αντιστοίχιση, θα εκτελεστεί η αντίστοιχη παραλλαγή δήλωσης (μία ή περισσότερες δηλώσεις). Η παραλλαγή με την προεπιλεγμένη λέξη-κλειδί εφαρμόζεται εάν καμία από τις άλλες δεν ταιριάζει (η λέξη προεπιλογή μπορεί να απουσιάζει). Εάν απουσιάζει η προεπιλογή και όλα τα αποτελέσματα σύγκρισης είναι αρνητικά, τότε καμία από τις επιλογές δεν εκτελείται.

Για να σταματήσετε τους επόμενους ελέγχους μετά από μια επιτυχημένη επιλογή κάποιας επιλογής, χρησιμοποιείται η δήλωση break, η οποία παρέχει άμεση έξοδο από τον διακόπτη διακόπτη.

Οι ένθετες κατασκευές διακόπτη επιτρέπονται.

Εξετάστε τους κανόνες για την εκτέλεση ενός άλματος χωρίς όρους, οι οποίοι μπορούν να αναπαρασταθούν με την ακόλουθη μορφή:

goto ετικέτα?

Ετικέτα είναι οποιοδήποτε αναγνωριστικό ακολουθούμενο από άνω και κάτω τελεία. Η δήλωση goto προσδιορίζει ότι η εκτέλεση του προγράμματος πρέπει να συνεχιστεί από τη δήλωση που προηγείται της ετικέτας. Μια ετικέτα μπορεί να τοποθετηθεί πριν από οποιαδήποτε πρόταση στη συνάρτηση όπου βρίσκεται η αντίστοιχη πρόταση goto. Δεν χρειάζεται να ανακοινωθεί.

Το Turbo Debugger υποστηρίζει πλήρως τη σύνταξη έκφρασης της γλώσσας C (C). Η έκφραση αποτελείται από ένα μείγμα πράξεων, συμβολοσειρών, μεταβλητών

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

Υπάρχουν τρεις λογικές πράξεις στη C++:

  1. Η λογική λειτουργία AND && , γνωρίζουμε ήδη;
  2. Λογική λειτουργία Ή || ;
  3. Λογική λειτουργία ΟΧΙ ! ή λογική άρνηση.

Οι λογικές πράξεις σχηματίζουν μια σύνθετη (σύνθετη) συνθήκη από πολλές απλές (δύο ή περισσότερες) συνθήκες. Αυτές οι λειτουργίες απλοποιούν τη δομή του κώδικα προγράμματος αρκετές φορές. Ναι, μπορείτε να τα κάνετε χωρίς αυτά, αλλά στη συνέχεια ο αριθμός των αν αυξάνεται αρκετές φορές, ανάλογα με την κατάσταση. Ο παρακάτω πίνακας χαρακτηρίζει συνοπτικά όλες τις λογικές πράξεις στη γλώσσα προγραμματισμού C++ για τη δημιουργία λογικών συνθηκών.

Τώρα θα πρέπει να καταλάβετε τη διαφορά μεταξύ της λογικής πράξης AND και της λογικής πράξης OR, για να μην μπερδευτείτε στο μέλλον. Ήρθε η ώρα να εξοικειωθείτε με τον τύπο δεδομένων bool-λογικός. Αυτός ο τύπος δεδομένων μπορεί να λάβει δύο τιμές: true (true) και false (false). Η συνθήκη που πρέπει να ελεγχθεί στις δηλώσεις επιλογής έχει τον τύπο δεδομένων bool . Σκεφτείτε την αρχή του παρακάτω προγράμματος και όλα θα είναι ξεκάθαρα με όλες αυτές τις λογικές πράξεις.

// or_and_not.cpp: Καθορίζει το σημείο εισόδου για την εφαρμογή της κονσόλας. #include "stdafx.h" #include χρησιμοποιώντας namespace std? int main(int argc, char* argv) ( bool a1 = true, a2 = false; // δήλωση δυαδικών μεταβλητών bool a3 = true, a4 = false; cout<< "Tablica istinnosti log operacii &&" << endl; cout << "true && false: " << (a1 && a2) << endl // логическое И << "false && true: " << (a2 && a1) << endl << "true && true: " << (a1 && a3) << endl << "false && false: " << (a2 && a4) << endl; cout << "Tablica istinnosti log operacii ||" << endl; cout << "true || false: " << (a1 || a2) << endl // логическое ИЛИ << "false || true: " << (a2 || a1) << endl << "true || true: " << (a1 || a3) << endl << "false || false: " << (a2 || a4) << endl; cout << "Tablica istinnosti log operacii !" << endl; cout << "!true: " << (! a1) << endl // логическое НЕ << "!false: "<< (! a2) << endl; system("pause"); return 0; }

Γραμμές 9 και 10θα πρέπει να είστε σαφείς, καθώς οι μεταβλητές του τύπου αρχικοποιούνται εδώ bool . Και σε κάθε μεταβλητή εκχωρείται μια τιμήσωστό ή λάθος . Ξεκινώντας με 9η γραμμήκαι τελειώνει 20η, που δείχνει τη χρήση λογικών πράξεων. Το αποτέλεσμα του προγράμματος (βλ. Εικόνα 1).

Tablica istinnosti log operacii && true && false: 0 false && true: 0 true && true: 1 false && false: 0 Tablica istinnosti log operacii || αλήθεια || ψευδής: 1 ψευδής || true: 1 true || αλήθεια: 1 λάθος || λάθος: 0 !true: 0 !false: 1 Πατήστε οποιοδήποτε πλήκτρο για να συνεχίσετε. . .

Εικόνα 1 - Λογικές λειτουργίες C++

Πιθανώς, έχετε μια ερώτηση, "Τι είναι αυτά τα μηδενικά και τα μονά;". Εάν υπάρχει ερώτηση, τότε πρέπει να απαντηθεί. Απαντώ: «Το μηδέν είναι μια αναπαράσταση της λογικής τιμής false (false), αλλά τα one είναι η λογική τιμή true (true).» Επιτρέψτε μου να εξηγήσω εν συντομία ορισμένα σημεία. Σύνθετη συνθήκη με χρήση Boolean ΚΑΙείναι αληθές μόνο αν αληθεύουν και οι δύο απλές συνθήκες. Σε όλες τις άλλες περιπτώσεις, η συνθήκη είναι ψευδής. Μια σύνθετη συνθήκη που χρησιμοποιεί λογικό Ή είναι ψευδής μόνο εάν και οι δύο απλές συνθήκες είναι ψευδείς. Σε όλες τις άλλες περιπτώσεις, η συνθήκη είναι αληθής. Λογική άρνηση ΔΕΝείναι μια ενιαία πράξη και δεν συνδυάζει δύο συνθήκες, σε αντίθεση με τις λογικές πράξεις ΚΑΙΚαι Ή, οι οποίες είναι δυαδικές πράξεις. Η λογική άρνηση σάς επιτρέπει να αντιστρέψετε το νόημα της συνθήκης, κάτι που είναι πολύ βολικό σε ορισμένες περιπτώσεις. Μια συνθήκη με λογική άρνηση είναι αληθής εάν η ίδια συνθήκη είναι ψευδής χωρίς άρνηση και το αντίστροφο.