snot Δημοσ. 10 Μαΐου 2006 Δημοσ. 10 Μαΐου 2006 Mporei kapoios na mou pei ti shmainei auto to expression: while(!sendByte(byte)); mias kai teleiws arxarios auto to ! me mperdeuei
bird Δημοσ. 10 Μαΐου 2006 Δημοσ. 10 Μαΐου 2006 Το ! είναι το NOT. Δηλαδή κάνε το loop όσο η sendByte(byte) ΔΕΝ είναι αληθής...
ahepa Δημοσ. 10 Μαΐου 2006 Δημοσ. 10 Μαΐου 2006 Εξαρτάται με το τι επιστρέφει η sendByte(byte). π.χ. 1) bool sendByte(...); 2) BOOL sendByte(...); 3) int bool sendByte(...); Το while(!sendByte(byte)); είναι ισοδύναμο με 1) while( sendByte(byte) == true ); 2) while( sendByte(byte) == TRUE ); 3) while( sendByte(byte) != 0 );
bird Δημοσ. 10 Μαΐου 2006 Δημοσ. 10 Μαΐου 2006 Το while τρέχει όσο ο έλεγχος μέσα στην παρένθεση είναι αληθής (δηλαδή στην C διάφορο από το μηδεν). Έτσι το while ( function() ) θα τρέχει όσο η συνάρτηση function() επιστρέφει μη μηδενική τιμή. Το ! αυτό που κάνει είναι να αλλάζει την τιμή απο true(Μη μηδενική) σε faulse(Μηδεν) και αντίστροφα. Οπότε στην περίπτωση σου το loop θα τρέχει όσο η συνάρτηση sendByte(byte) επιστρέφει μηδέν ή faulse και όχι true όπως λέει ο ahepa.
snot Δημοσ. 11 Μαΐου 2006 Μέλος Δημοσ. 11 Μαΐου 2006 Για να μην ανοίξω καινούργιο topic για μια ακόμη μάλλον ηλίθια απορία στο παρακάτω: typedef struct { __REG32 INT0 :1; //__reg32 defined as unsigned long __REG32 INT1 :1; ... το :1 μπορεί να μου κάποιος τι δηλώνει ή τον λόγο ύπαρξης του;
bird Δημοσ. 11 Μαΐου 2006 Δημοσ. 11 Μαΐου 2006 Παραθέτω το παρακάτω όπως το βρήκα στα αγγλικά: > main() { struct Flags { unsigned int Online :1; unsigned int Mounted :1; } struct Flags TapeInfo; TapeInfo.Online = 1; TapeInfo.Mounted = 0; } The :1 tells the compiler that only 1 byte is required for Online and Mounted. There are a few points to note about this though. * You may expect the compiler to reserve 2 bytes for the structure, it actually reserves one word (usually 4 bytes) as this is the smallest unit that can be reserved, the remaining 2 bytes are unavailable. This is still better than the 2 words that wold normally get reserved. * You can put any number into the variable, if the number is too large to fit, the high order bits are lost without warning. * Only signed int, unsigned int, int support this syntax.
dop Δημοσ. 11 Μαΐου 2006 Δημοσ. 11 Μαΐου 2006 @ahepa: η C δεν έχει τύπο BOOL, ούτε int bool. Η sendbyte() επιστρέφει κάποια τιμή προφανώς μη μηδενική αν πέτυχε και μηδενική αν απέτυχε. Αν κάνεις !0 αυτό ισοδυναμεί με true. Συνεπώς, ισχύει ότι είπε ο bird. @bird: το > struct A { unsigned int i:1; }; σημαίνει ότι ο προγραμματιστής θέλει το i να είναι ένα (1) bit και όχι byte. Για λόγους ταχύτητας, ναι μεν δεν αγνοείται η δήλωση, αλλά εν τέλει το sizeof (struct A)==4 σε κάποιο 32bit μηχάνημα (δηλαδή ένας int) μια και θα προστεθούν και alignment bits - η κατάσταση ίσως αλλάξει αν κάνεις optimize για το δυνατόν ελάχιστο memory footprint της εφαρμογής.
bird Δημοσ. 11 Μαΐου 2006 Δημοσ. 11 Μαΐου 2006 Thanx dop. Εξάλλου κι εγώ δεν το είχα ξαναδεί το :1 οπότε το έγραψα όπως το βρήκα στο δύκτιο.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.