Η γλώσσα προγραμματισμού C

Σχετικά έγγραφα
Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C

Λογικό "και" (AND) μας επιστρέφει 1 αν και οι δύο operands είναι όχι μηδέν, διαφορετικά 0)

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

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

Εισαγωγή στον Υπολογισμό - Τελεστές & Είσοδος/Έξοδος

Η γλώσσα προγραμματισμού C

Ανάπτυξη και Σχεδίαση Λογισμικού

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Εισαγωγή στον Προγραμματισμό

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Προγραμματισμός Ι (ΗΥ120)

Δομημένος Προγραμματισμός (ΤΛ1006)

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

Προγραμματισμός Η/Υ (ΤΛ2007 )

Η γλώσσα προγραμματισμού C

Ανάπτυξη και Σχεδίαση Λογισμικού

Εισαγωγή στον Προγραμματισμό

Η γλώσσα προγραμματισμού C

ΦΥΛΛΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ 1

Διαδικασιακός Προγραμματισμός

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

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

8. Συνθήκες ελέγχου, λογικοί τελεστές

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Προγραμματισμός Ι (ΗΥ120)

a = 10; a = k; int a,b,c; a = b = c = 10;

scanf() scanf() stdin scanf() printf() int float double %lf float

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Διαδικασιακός Προγραμματισμός

Δομημένος Προγραμματισμός (ΤΛ1006)

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Η γλώσσα προγραμματισμού C

Εισαγωγή στον προγραμματισμό. Τμήμα Πληροφορικής & Επικοινωνιών ΤΕΙ Σερρών Εργαστήριο 2

Η γλώσσα προγραμματισμού C

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 2 Εντολές Εισόδου/Εξόδου Τελεστές. Δρ. Γιώργος Λαμπρινίδης 23/10/2015 Η - Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 1

Προγραμματισμός Ι (ΗΥ120)

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

Εισαγωγή στην γλώσσα προγραμματισμού C

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

Δομημένος Προγραμματισμός (ΤΛ1006)

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Ι (HY120)

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

Η γλώσσα προγραμματισμού C

Προγραμματισμός Η/Υ (ΤΛ2007 )

Δομημένος Προγραμματισμός (ΤΛ1006)

Οικονόμου Βαγγέλησ Διάλεξη Νο 2. Δομημένοσ Προγραμματιςμόσ - Διάλεξη 2

Δομημένος Προγραμματισμός (ΤΛ1006)

5. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Β' μέρος: while - do..while)

Εισαγωγή στους Αλγόριθμους και τον Προγραμματισμό. 3η Διάλεξη Είσοδος Δεδομένων Συνθήκες Βρόχοι Παραδείγματα

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"

Τύποι Δεδομένων Είσοδος/Έξοδος

Προγραμματισμός Ι (ΗΥ120)

Προσέξτε πως η παράσταση μπορεί να περιλαμβάνει όχι μόνο μία τιμή ή μια άλλη μεταβλητή αλλά μια ολόκληρη μαθηματική παράσταση, όπως η εξής:

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο)

Γλώσσα Προγραμματισμού C

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Υπολογισμός - Εντολές Ελέγχου

Προγραμματισμός Η/Υ (ΤΛ2007 )

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

ΗΥ-150. Προγραμματισμός

ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Εισαγωγή στον Προγραμματισμό

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Προγραµµατισµός Ι (ΗΥ120)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 2 Ο. Εισαγωγή στην C Εντολές εξόδου Εντολές εισόδου Μορφοποιητές ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Προγραμματισμός Η/Υ (ΤΛ2007 )

Δομημένος Προγραμματισμός

Προγραμματισμός I (Θ)

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΑΣΚΗΣΗ 3: ΠΡΟΤΑΣΕΙΣ, ΕΚΦΡΑΣΕΙΣ ΚΑΙ ΤΕΛΕΣΤΕΣ

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 )

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Υπολογισμός - Εντολές Επανάληψης

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Η γλώσσα προγραμματισμού C

Δομημένος Προγραμματισμός (ΤΛ1006)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

Εισαγωγή στον Προγραμματισμό

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

ΗΥ-150. Προγραμματισμός

Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις. Επανάληψη για την ενδιάμεση εξέταση. (Διάλεξη 13)

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Transcript:

Η γλώσσα προγραμματισμού C Συναρτήσεις εισόδου/εξόδου, τελεστές

Η συνάρτηση scanf() είσοδος δεδομένων Διαβάζει από το πληκτρολόγιο (stdin) μορφοποιημένες τιμές μεταβλητών. scanf (ΣΕΙΡΑ_ΕΛΕΓΧΟΥ, δείκτης_μεταβλητής-1, δείκτης_μεταβλητής-2,..., δείκτης_μεταβλητής-ν) Στη πιο γνωστή της μορφή χρησιμοποιείται για να καταχωρίσουμε δεδομένα σε μεταβλητές από το πληκτρολόγιο. Οι προσδιοριστές στη ΣΕΙΡΑ_ΕΛΕΓΧΟΥ αντιστοιχούν σε διευθύνσεις μεταβλητών (δείκτες). Η συνάρτηση scanf() μοιάζει πολύ με την printf() με μια μεγάλη διαφορά: δεν αναφέρεται σε ονομασίες μεταβλητών, αλλά σε δείκτες μεταβλητών. Άλλη διαφορά: η ΣΕΙΡΑ_ΕΛΕΓΧΟΥ στη scanf() περιέχει κυρίως προσδιοριστές και όχι επεξηγηματικό κείμενο. Χαρακτήρες ελέγχου μπορείτε να βάλετε. Για μεταβλητές τύπου double, ο προσδιοριστής είναι: %lf 2

Λίγα για τους δείκτες Δήλωση στη C int NUM = 5 ; Η διεύθυνση του NUM (&NUM) Δήλωση στη C char LET = A ; Δείκτης της NUM Η διεύθυνση του LET (&LET) Δείκτης της LET Διευθύνσεις μνήμης 01010001 01010010 01010011 01010100 01010101 01010110 01010111 01011001 01011010 01011011 Μνήμη 10001010 10001010 00000000 00000101 01000100 01001010 01001010 01000001 10001010 10001010 Η έκφραση &NUM εννοεί την διευθυνση της μεταβλητής NUM (=01010011 2 =83 10 ). Η scanf() λοιπόν αντίθετα με την printf() χρησιμοποιεί δείκτες μεταβλητών. 3

Παραδείγματα εντολών με τη scanf() /* Διαβάζει από το πληκτρολόγιο την ακέραια μεταβλητή x */ printf("enter first number: "); scanf("%d", &x); /* Διαβάζει από το πληκτρολόγιο μια μεταβλητή κινητής υποδιαστολής (fnum) και μια ακέραια μεταβλητή (inum) */ printf ("Give me 1 float and 1 integer number:"); scanf("%f %d", &fnum, &inum); Μετά την είσοδο δεδομένων, πατάμε <ENTER> 1 κενό μεταξύ των τιμών που δίνουμε Καλό είναι κάθε κλήση της scanf() να συνοδεύεται από μια κλήση της printf(), (η printf να μπαίνει πριν την scanf), ώστε ο χρήστης γνωρίζει τι δεδομένο πρέπει να πληκτρολογήσει. Όταν εισάγονται με μια κλήση της scanf() πάνω από 2 δεδομένα αυτά θα πρέπει να έχουν μεταξύ τους τουλάχιστον 1 κενό. Δίνουμε <ENTER> μετά την πληκτρολόγηση των δεδομένων. Σύνηθες λάθος: scanf("%d",x) αντί για scanf("%d", &x). 4

Τι επιστρέφει η scanf() η scanf() έχει κάποια τιμή επιστροφής που ανάλογα είναι: ο αριθμός των όρων που διάβασε με επιτυχία, μηδέν (0) αν δεν μπορέσει να διαβάσει με επιτυχία ή η τιμή του EOF (End Of File ) όταν φτάσει απροσδόκητα στο τέλος αρχείου. Η κλήση: n = scanf("%d%f", &i, &x); όταν η γραμμή εισαγωγής (πληκτρολόγιο) είναι 25 54.32 και οι δηλώσεις των μεταβλητών είναι: θα έχει σαν αποτέλεσμα: int i, n; float x; η μεταβλητή n να πάρει την τιμή 2 η μεταβλητή i να πάρει την τιμή 25 και η μεταβλητή x να πάρει την τιμή 54.32. 5

Παραδείγματα προγραμμάτων με την scanf() #include <stdio.h> #include <stdlib.h> main() { int index; float num; printf (" Give me the integer index: "); scanf("%d", &index); printf (" Give me the float num: "); scanf("%f", &num); printf("the value of index is %d\n",index); printf("the value of num is %f\n",num); num = 27.567; printf("the new value of num is %f\n",num); system( PAUSE ); } #include <stdio.h> #define FPA 0.23 main() { float timi_dvd, poso; int posotita; printf ("\ntimi DVD:"); scanf ("%f", &timi_dvd); printf ("Dwste posotita:\n"); scanf ("%d", &posotita); poso=timi_dvd*posotita; printf ("\n\n"); printf("poso plirwmis: %5.2f\n", poso); poso = poso + FPA * poso; printf ("\n\n"); printf("poso plirwmis: %6.3f\n", poso); getchar(); getchar(); } 6

7

Οι συνάρτησεις getchar(), putchar() Η getchar() διαβάζει έναν χαρακτήρα από το πληκτρολόγιο με το πλήκτρο <enter> (περιμένει τη πληκτρολόγηση του <enter> ). H συνάρτηση getchar() δεν δέχεται παραμέτρους. Υπάρχει στη βιβλιοθήκη <stdio.h>. Όταν εκτελείται, επιστρέφει τον χαρακτήρα που διάβασε: char alpha; alpha = getchar(); scanf( %c, &alpha); H getchar() είναι μια παραλλαγή της συνάρτησης getche() η οποία διαβάζει από το πληκτρολόγιο έναν χαρακτήρα και τον εμφανίζει στη οθόνη. Η getche() υπάρχει στην βιβλιοθήκη <conio.h> και δεν δέχεται παραμέτρους. H putchar() εμφανίζει στην οθόνη ένα μόνο χαρακτήρα: putchar(ch); putchar(getchar()); //εμφανίζει στην οθόνη τον χαρακτήρα που πληκτρολογήθηκε Η putchar() υπάρχει στην βιβλιοθήκη <stdio.h>. 8

Συμβολοσειρές printf("what's your name:"); gets(name); printf("hello "); puts(name); #include <stdio.h> main() { char aaa[20]; char bbb[10] = "Ritsa"; printf("hello my name is "); puts(bbb); printf("what's your name:"); gets(aaa); printf("\n"); printf("%s you 're welcome",aaa); } Στη C για την αποθήκευση και χειρισμό των συμβολοσειρών χρησιμοποιείται την δομή του πίνακα τύπου char. O τελευταίος χαρακτήρας του πίνακα είναι ο \0 (μηδενικός χαρακτήρας). char minima1[20] = "hello"; char minima2[ ] = {'h', 'e','l','l','o','\0'};. gets (minima1); scanf("%s",minima2); puts(minima1); Χωρίς & printf("τo minina einai:%s\n", minima); 9

Οι συνάρτησεις puts() & gets() Η puts() εμφανίζει στην οθόνη μια σειρά χαρακτήρων (συμβολοσειρά): gets(<μεταβλητή_συμβολοσειράς>); Η puts() μετά την εμφάνιση της συμβολοσειράς, τυπώνει τον χαρακτήρα \n, δηλαδή επιστρέφει στην επόμενη σειρά. Ο χαρακτήρας \0 που υποδεικνύει το τέλος της συμβολοσειράς (μηδενικός χαρακτήρας) χρησιμοποιείται από την puts() και καλό θα είναι να προσέχετε, ώστε η συμβολοσειρά που έχετε δώσει για εκτύπωση να περιέχει στο τέλος τον χαρακτήρα \0. Η gets() διαβάζει από το πληκτρολόγιο (είσοδος -stdin) μια σειρά χαρακτήρων (συμβολοσειρά) και την αναθέτει σε μια μεταβλητή συμβολοσειράς: gets(<μεταβλητή_συμβολοσειράς>); H gets() διαβάζει από το πληκτρολόγιο μέχρι να συναντήσει τον χαρακτήρα \n (πράγμα που συμβαίνει όταν πατήσουμε το <ENTER>). O χαρακτήρας \0 μπαίνει αυτόματα στο τέλος της συμβολοσειράς που πληκτρολογείτε. 10

Οι τελεστές συσχετισμού Πρόκειται για τελεστές που τους χρησιμοποιούμε για την δημιουργία απλών λογικών εκφράσεων συσχετισμού (σύγκρισης). < Μικρότερο από > Μεγαλύτερο από <= Μικρότερο από ή ίσο >= Μεγαλύτερο από ή ίσο == Λογικό ίσον!= Διάφορο (όχι ίσο) Το αποτέλεσμα μιας λογικής έκφρασης είναι είτε 1 (αληθές), είτε 0 (ψευδές). Οι τελεστές σύγκρισης χρησιμοποιούνται σαν συνθήκες κυρίως στις εντολές ελέγχου και επανάληψης. 11

Παρατηρήσεις στους τελεστές συσχετισμού Αν έχω x=2; και y=3; τότε η λογική έκφραση (x > y) επιστρέφει 0 (ψευδής έκφραση). Προσέξτε τον τελεστή για το λογικό ίσον που είναι ένα διπλό ίσον (= =). Στην C η προτεραιότητα των τελεστών συσχετισμού είναι μικρότερη από αυτή των αριθμητικών τελεστών, ενώ είναι μεγαλύτερη από αυτή του τελεστή καταχώρησης. Άρα η μεταβλητή i στη εκτέλεση του κώδικα που ακολουθεί, j = k =13; i = j == k; θα πάρει την τιμή 1, διότι ο τελεστής της ισότητας (==) έχει μεγαλύτερη προτεραιότητα από τον τελεστή καταχώρησης (ένα απλό ίσον =). Καθώς λοιπόν οι μεταβλητές j και k είναι ίσες το αποτέλεσμα της σύγκρισης αυτών (j == k) θα είναι αληθές, δηλαδή 1. 12

Λογικοί τελεστές Πρόκειται για τελεστές που μας επιτρέπουν να συνδυάσουμε απλές εκφράσεις συσχετισμού και να δημιουργήσουμε πιο πολύπλοκες λογικές προτάσεις. && Λογικό "και" (AND) Λογικό διαζευκτικό "ή" (είτε - OR)! Λογική άρνηση (ΝΟΤ) Το αποτέλεσμα μιας πρότασης με λογικούς τελεστές είναι είτε μηδέν (0 -ψευδές), είτε όχι μηδέν (αληθές). Με τους τελεστές && και, απαιτείται η χρήση 2 όρων, ενώ με τον τελεστή! ενός (μοναδιαίος). x > 10 && x < 20 (x > 10 && x < 20) x > 50 13

Παράδειγμα με λογικούς τελεστές Η προτεραιότητα των τελεστών συσχετισμού είναι μεγαλύτερη από αυτή των λογικών τελεστών ενώ η προτεραιότητα και των δύο (συσχετισμού και λογικών) είναι μικρότερη από αυτή των αριθμητικών τελεστών! H λογική έκφραση που ακολουθεί μας βρίσκει αν ένα έτος είναι δίσεκτο ή όχι: (etos % 4 = = 0 && etos % 100!= 0 etos % 400 = = 0) Δίσεκτα έτη θεωρούνται όσα διαιρούνται ακριβώς με το 4 αλλά όχι με το 100. Εξαίρεση αποτελούν τα έτη που διαιρούνται ακριβώς με το 400, που θεωρούνται επίσης δίσεκτα. Αν το έτος λοιπόν είναι δεν είναι δίσεκτο τότε η λογική έκφραση επιστρέφει την τιμή 0 (ψευδής). Άλλος τρόπος: (! (etos % 4) && (etos % 100)! (etos % 400) ) 14

Oι τελεστές ολίσθησης << και >> Πρόκειται για λογικούς τελεστές που χειρίζονται bits. Με τη εφαρμογή των τελεστών ολίσθησης τα bits της μεταβλητής μετατοπίζονται προς τα αριστερά ή δεξιά. << Ολίσθηση προς αριστερά >> Ολίσθηση προς δεξιά. Η έκφραση alpha << 2 μετατοπίζει τα bits της μεταβλητής alpha κατά 2 θέσεις αριστερά. Στα κενά που δημιουργούνται τοποθετούνται μηδενικά. Η έκφραση alpha >> 2 μετατοπίζει τα bits της μεταβλητής alpha κατά 2 θέσεις δεξιά. Αν η μεταβλητή δεν έχει πρόσημο στα κενά που δημιουργούνται τοποθετούνται μηδενικά. Αν η μεταβλητή έχει πρόσημο τότε τα bits που αδειάζουν, είτε παίρνουν το bit του πρόσημου, είτε "γεμίζουν" με 0. 15

Παραδείγματα με τους τελεστές ολίσθησης /* Ολίσθηση αριστερά unsigned short K, J; J=12; // J = 0000000000001100 2 K=J << 2; // K = 0000000000110000 2 (48 10 ) /* Ολίσθηση δεξιά unsigned short K, J; J=12; // J = 0000000000001100 2 K=J >> 2; // K = 0000000000000011 2 (3 10 ) Η ολίσθηση μιας μεταβλητής προς τα αριστερά κατά n θέσεις ισοδυναμεί με πολλαπλασιασμό της με 2 n ενώ προς τα δεξιά με διαίρεση της με 2 n. 16

Αλλοι τελεστές χειρισμού bits Τελεστής Περιγραφή ~ Δυαδική άρνηση (όπου 1 μπαίνει 0 και όπου 0 μπαίνει 1 - one's complement). Υπάρχει ένας μόνο όρος. & Δυαδικό "και" σε επίπεδο bit (σύζευξη / AND). Ο τελεστής απαιτεί δύο όρους. Υπάρχει και ο τελεστής της διεύθυνσης (&) με τον ίδιο συμβολισμό που όταν μπαίνει μπροστά σε μία μεταβλητή αναφέρεται στην διεύθυνση της. Δυαδικό διαζευκτικό "ή" σε επίπεδο bit (διάζευξη / OR). Ο τελεστής απαιτεί δύο όρους. ^ Αποκλειστική διάζευξη "ή" (exclusive OR) σε επίπεδο bit. Ο τελεστής απαιτεί δύο όρους. 17

Έλεγχος αν ένας αριθμός είναι άρτιος ή περιττός Έστω L ακέραια μεταβλητή χωρίς πρόσημο (unsigned int L;). Θέλουμε να διαπιστώσουμε αν η τιμή που έχει είναι άρτιος ή περιττός αριθμός. Αυτό γίνεται αν δούμε τη τιμή της μεταβλητής Κ (ίδιος τύπος με την L) όπου: Κ= L &1 Αν K είναι ίσος με 0 είναι τότε ο L είναι άρτιος Αν Κ είναι ίσος με 1 τότε o L είναι περιττός Γιατί? Όταν ένας ακέραιος εκφράζεται σε δυαδικό σύστημα τότε αν είναι άρτιος το τελευταίο bit δεξιά είναι 0. Αν είναι περιττός τότε είναι 1. Κάνοντας L&1 ουσιαστικά μηδενίζουμε όλα τα bits του L εκτός του τελευταίου δεξιά (Least Significant Bit - LSB) που παραμένει ως έχει. 00101011 (L = 43) & 00000001 (1) 00000001 (K) 00101010 (L = 42) & 00000001 (1) 00000000 (K) Βασικά ελέγχουμε το LSB 18

Κάνοντας 1 το i bit από δεξιά Πως μπορώ να κάνω το 1 το i bit (set on) μιας μεταβλητής L? Έστω ότι έχω μια μεταβλητή με περιεχόμενο 01111000 (πρόκειται για τον αριθμό 120). Το 3 ο bit είναι 0. Αν θέλω να κάνω 1 το 3 ο bit από δεξιά θα πρέπει να δώσω: L 4 Το 4 στο δυαδικό είναι 00000100 (το 3 ο bit είναι 1 και υπόλοιπα 0). Εκτελώντας L=L 4 η L παίρνει τη δυαδική τιμή 01111100 όπου το 3 ο bit είναι 1 (τα υπόλοιπα παραμένουν ως έχουν). 01111000 (120) 00000100 (4) 01111100 (124) 19

Οι τελεστές αυξησης/μείωσης Τελεστής Περιγραφή ++ κάνει αύξηση μιας μεταβλητής κατά 1 μονάδα π.χ i++; - - κάνει μείωση μιας μεταβλητής κατά 1 π.χ i-- ; Εχει σημασία αν οι τελεστές αύξησης/μείωσης τεθούν πριν (++i) ή μετά (i--) την μεταβλητή. int a=3, b=3; int syna, synb; syna=a++; synb=++b; printf ("a= %d, syna= %d, b= %d, synb=%d\n", a, syna, b, synb); Αποτέλεσμα: a=4, syna=3, b=4, synb=4 20

Οι συνδιαστικοί τελεστές εκχώρησης += Πρόσθεση σε μεταβλητή. Παράδειγμα: x+=1; είναι το ιδίο όπως x=x+1 -= Αφαίρεση από μεταβλητή. Παράδειγμα: x-=1; (όπως x=x-1) *= Πολλαπλασιασμός μεταβλητής. Παράδειγμα: x*=3; (όπως x=x*3) /= Διαίρεση μεταβλητής. Παράδειγμα: x/=2; (όπως x=x/2) %= Το υπόλοιπο. Παράδειγμα: alpha %=2 (οπως alpha=alpha %2) >>= Ολίσθηση δεξιά. Παράδειγμα: beta >>= 3 (τα bits της beta ολίσθησαν δεξιά κατα 3 θέσεις) <<= Ολίσθηση αριστερά. Παράδειγμα: beta <<= 3 (τα bits της beta ολίσθησαν αριστερά κατά 3 θέσεις) &= Σύζευξη (AND). Παράδειγμα: var &= 0177 (όπως var = var & 0177) = Διάζευξη (OR). Παράδειγμα: var = 0177 ^= Αποκλειστική διάζευξη (exclusive OR). Παράδειγμα: var ^ = 0177 21

Ο τελεστής συνθήκης? Η γενική μορφή χρήσης του τελεστή «?» είναι: Λογική έκφραση/πρόταση? εντολή-1 : εντολή-2 Αν η λογική έκφραση/πρόταση είναι αληθής τότε εκτελείται η εντολή-1, διαφορετικά εκτελείται η εντολή-2. (alpha > 0)? printf( θετικός ) : printf( αρνητικό ή μηδέν»); Ουσιαστικά πρόκειται για μια συμπαγής μορφή της εντολής if-else (που θα δούμε αργότερα) Η τιμή μιας έκφρασης με τον τελεστή?: είναι ίση με την τιμή της έκφρασης που εκτελείται τελευταία. num = (x<=5)? 1 : 0; ισοδύναμα if (x<=5) num=1; else num=0; 22

Προτεραιότητες μεταξύ των τελεστών της C Ιεραρχία Τελεστές Φορά 1 ( ) [ ]. -> Από αριστερά πρός δεξιά 2! ~ ++ -- &(διεύθυνση) *(indirection) (type) sizeof Από δεξιά πρός αριστερά 3 *(πολλαπλασιασμός) / % Από αριστερά πρός δεξιά 4 + - Από αριστερά πρός δεξιά 5 << >> Από αριστερά πρός δεξιά 6 < <= > >= Από αριστερά πρός δεξιά 7 = =!= Από αριστερά πρός δεξιά 8 & (AND) Από αριστερά πρός δεξιά 9 ^ Από αριστερά πρός δεξιά 10 Από αριστερά προς δεξιά 11 && Από αριστερά πρός δεξιά 12 Από αριστερά πρός δεξιά 13? : Από δεξιά πρός αριστερά 14 = += -= *= /= %= &= ^= = <<= >>= Από δεξιά πρός αριστερά 15, Από αριστερά προς δεξιά 23