Αριθμητικοί και λογικοί τελεστές

 

Συγγραφέας: Πορλιδάς Δημήτριος

Βιογραφικό Σημείωμα

electronics@porlidas.gr

Facebook

Linkedin


 

 

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

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

Οι αριθμητικοί τελεστές =, -, +, *, /, % χρησιμοποιούνται για αριθμητικές πράξεις μεταξύ τελεστέων (καταχωρητών – μεταβλητών – σταθερών). Με τη σειρά που αναφέρονται είναι οι αριθμητικές πράξεις ισότητας, αφαίρεσης, πρόσθεσης, πολλαπλασιασμού, διαίρεσης και υπόλοιπου διαίρεσης.

i1 = 0;                    // i1 will be i1=0

i1 = i2 + i3;              // i2=45, i3=10, then i1 will be i1=55

i1 = i1 + 6;               // Initially i1=55, then i1 will be i1=61

i1 += 6;                   // Initially i1=55, then i1 will be i1=61

Στο πρώτο από τα παραπάνω παραδείγματα η μεταβλητή i1 παίρνει τιμή 0, στο δεύτερο η μεταβλητή i1 παίρνει την τιμή του αθροίσματος των i2 και i3, στο τρίτο και στο τέταρτο η i1 παίρνει την τιμή που προκύπτει από το άθροισμα της τιμής που είχε αρχικά με το 6. Μολονότι δίνουν το ίδιο αποτέλεσμα και οι δύο τρόποι σύνταξης, ο τελευταίος είναι προτιμότερος γιατί μπορεί να βοηθήσει τον compiler να παράγει αποτελεσματικότερο κώδικα. Οι τελεστές +=, -=, *=, /=, %= ονομάζονται τελεστές αντικατάστασης.

Κατά τη διαίρεση ως αποτέλεσμα λαμβάνουμε μόνο το ακέραιο μέρος, για το υπόλοιπο πρέπει να εκτελέσουμε την πράξη του υπολοίπου διαίρεσης:

i1 = i2 / i3;              // i2=45, i3=10, then i1 will be i1=4

i1 = i2 % i3;              // i2=45, i3=10, then i1 will be i1=5

i1 %= 6;                       // Initially i1=55, then i1 will be i1=1

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

Οι τελεστές σύγκρισης >, <, >=, <=, χρησιμοποιούνται, όπως ορίζεται από το σύμβολο, για σύγκριση αριθμητικών τιμών μεταξύ τελεστέων (καταχωρητών – μεταβλητών – σταθερών) και επιστρέφουν Αληθές ή Ψευδές[1] στη συνθήκη που χρησιμοποιούνται:

if (i1 >= 4) { /* Your code here */ }

Στο παραπάνω παράδειγμα θα εκτελεστεί ο κώδικας που βρίσκεται μέσα στις αγκύλες αν η συνθήκη στην παρένθεση είναι Αληθής, δηλαδή η i1 είναι μεγαλύτερη ή ίση του 4.

Με παρόμοιο τρόπο λειτουργούν οι τελεστές σύγκρισης == και != όπου ο πρώτος χρησιμοποιείται για το ίσο και ο δεύτερος για το διάφορο:

if (i1 == 4) { /* Your code here */ }

Στο παραπάνω παράδειγμα θα εκτελεστεί ο κώδικας που βρίσκεται μέσα στις αγκύλες αν η i1 είναι ίση του 4.

Οι λογικοί τελεστές &, |, ^, ~, <<, >>, χρησιμοποιούνται για λογικές πράξεις με bit μεταξύ τελεστέων (καταχωρητών – μεταβλητών – σταθερών). Με τη σειρά που αναφέρονται είναι οι λογικές πράξεις AND, OR, XOR, συμπλήρωμα ως προς 1, αριστερή ολίσθηση και δεξιά ολίσθηση[2]:

i1 = i2 & i3;    // i2=0b00101101, i3=0b00001010, then i1 will be i1=0b00001000

i1 = i2 | i3;    // i2=0b00101101, i3=0b00001010, then i1 will be i1=0b00101111

i1 = i3 << 4;    // i3=0b00001010, then i1 will be i1=0b10100000

i1 = ~i3;           // i3=0b00001010, then i1 will be i1=0b11110101

Το συμπλήρωμα ως προς 1 μπορεί να χρησιμοποιηθεί και στον ίδιο τον τελεστή:

i1 = ~i1;           // Initially i1=0b00110110, then i1 will be i1=0b11001001

Στις λογικές πράξεις με bit μεταξύ τελεστέων μπορούμε να χρησιμοποιήσουμε επίσης τελεστές αντικατάστασης &=, |=, ^=, <<=, >>=

i1 &= 0b00001010;       // Initially i1=0b00110110, then i1 will be i1=0b00000010

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

i1 = (i1 & 0b00001010);

Οι λογικοί τελεστές &&, ||, !, χρησιμοποιούνται για λογικές πράξεις μεταξύ των καταστάσεων Αληθούς ή Ψευδούς των συνθηκών κάποιου γενικότερου όρου. Με τη σειρά που αναφέρονται είναι οι λογικές πράξεις: AND, OR, NOT. Επιστρέφουν και αυτές με τη σειρά τους κατάσταση αληθούς ή ψευδούς.

if ((i1 == 0xA0) && (i2 == 0xB0) && (i3 == 0xC0)) { /* Your code here */ }

if (!((i1 == 0xA0) && (i2 == 0xB0) && (i3 == 0xC0))) { /* Your code here */ }

Στο πρώτο από τα παραπάνω παραδείγματα θα εκτελεστεί ο κώδικας που βρίσκεται μέσα στις αγκύλες αν ισχύουν και οι 3 συνθήκες της παρένθεσης, δηλαδή i1=A0, i2=B0 και i3=C0. Αυτό ερμηνεύεται ως εξής: κάθε μια συνθήκη όταν ισχύει επιστρέφει Αληθές, το AND Αληθών είναι και αυτό Αληθές συνεπώς ο όρος της παρένθεσης στην if καθίσταται Αληθής και η εντολή εκτελείται. Στο δεύτερο παράδειγμα ο κώδικας θα εκτελείται πάντα εκτός από την περίπτωση που θα ισχύσουν οι τρεις συνθήκες, γιατί το λογικό αποτέλεσμα των τριών συνθηκών αντιστρέφεται.

 

©2016 Πορλιδάς Δημήτριος

 


[1] Αληθές ή Ψευδές (True or False). Το Αληθές αντιστοιχεί σε οποιαδήποτε μη μηδενική τιμή (non-zero value), ενώ το Ψευδές αντιστοιχεί σε μηδέν (zero value) (0).

[2] Κατά την αριστερή ολίσθηση το LSB συμπληρώνεται με 0 και κάθε ολίσθηση ισοδυναμεί με πολλαπλασιασμό με 2. Κατά τη δεξιά ολίσθηση το MSB συμπληρώνεται με 0 αν η μεταβλητή είναι μη προσημασμένη. Αν είναι προσημασμένη, συμπληρώνεται με 1 αν είναι αρνητικός αριθμός (το MSB είναι 1 και ο αριθμός έχει τη μορφή συμπληρώματος ως προς 2) ενώ αν είναι θετικός αριθμός (το MSB είναι 0 και ο αριθμός έχει κανονική μορφή) με 0 και ισοδυναμεί με διαίρεση με 2.

 

Σας ευχαριστώ για την υποστήριξή σας ώστε να γίνει η ιστοσελίδα μου καλύτερη.

© 2017 Πορλιδάς Δημήτριος