Προς το περιεχόμενο

Ερώτηση για C++


Kοnstadinos

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας, έχω αρχίσει να διαβάζω για προγραμματισμό C++ και έχω κολλίσει στο εξής (επειδή διαβάζω αγγλικά guides) το signed και unsigned integer δεν έχω καταλάβει τι είναι (κατάλαβα το τον όρο του απλού int)

 

char Character or small integer. 1byte signed: -128 to 127

unsigned: 0 to 255

short int

(short) Short Integer. 2bytes signed: -32768 to 32767

unsigned: 0 to 65535

 

Σόρρυ αν είναι πολύ novice η ερώτηση... και όμως είναι.

Δημοσ.

Ο signed μπορεί να πάρει αρνητικές τιμές ο unsigned δεν μπορεί.

 

Αλλά και οι δύο τύποι έχουν το ίδιο εύρος τιμών.

Πχ/

-128 ως 127 = 255 "θέσεις"

-32768 ως 32767 = 65535 "θέσεις"

Δημοσ.

Στη μεταβλητή τύπου unsigned int μπορείς να βάλεις μόνο θετικούς ακέραιους. Η signed int παίρνει και θετικούς ακέραιους και αρνητικούς. Αν πχ δε σ' ενδιαφέρουν οι αρνητικές τιμές σε μια ακέραια μεταβλητή μπορείς να την ορίσεις ως unsigned κι έτσι θα έχεις και διπλάσιες θετικές τιμές διαθέσιμες.

Δημοσ.
Γεια σας, έχω αρχίσει να διαβάζω για προγραμματισμό C++ και έχω κολλίσει στο εξής (επειδή διαβάζω αγγλικά guides) το signed και unsigned integer δεν έχω καταλάβει τι είναι (κατάλαβα το τον όρο του απλού int)

 

char Character or small integer. 1byte signed: -128 to 127

unsigned: 0 to 255

short int

(short) Short Integer. 2bytes signed: -32768 to 32767

unsigned: 0 to 65535

 

Σόρρυ αν είναι πολύ novice η ερώτηση... και όμως είναι.

 

Όπως ανέφεραν και τα άλλα παιδιά η διάκριση αφορά το πρόσημο.

 

Η μεταβλητή τύπου char καταλαμβάνει μέγεθος 1 byte όπως σωστά αναφέρεις

επομένως μπορεί να λάβει 256 τιμές που είναι το μέγεθος 1 byte.

 

Έτσι όταν δηλώσεις μια μεταβλητή unsigned char τότε μπορεί να πάρει τιμές

από 0 μέχρι 255. Στην signed περίπτωση το 1 bit χρησιμοποιείται για το πρόσημο

έτσι μας μένουν τα υπόλοιπα 7 bits για την τιμή για αυτό υπάρχει η διαφοροποίηση

και δέχεται από -128 μέχρι 127.

 

Το ίδιο ισχύει και για το short int με τη διαφορά ότι καταλαμβάνει 2 bytes.

2 Bytes = 2 ^ 16 bits δηλαδή τιμές από 0 μέχρι 65535. Αν θέλουμε πρόσημο, τότε

μας μένουν 15 bits οπότε οι δυνατές τιμές είναι από -32768 μέχρι 32767

 

Επίσης έχε στο νου σου ότι το μέγεθος (άρα και το εύρος) των τύπων εξαρτάται

από την αρχιτεκτονική του επεξεργαστή και δεν είναι πάντα ίδιο (εκτός από τον

char που καταλαμβάνει πάντα 1 C byte)

Δημοσ.
Στους 64bit επεξεργαστές που κυκλοφορούν τώρα, ο int καταλαμβάνει 8byte;

Ο long και ο short πόσα byte καταλαμβάνουν;

 

Ο short είναι σχεδόν παντού 16bit. Οι pointers είναι παντού 64bit.

Ο int και ο long εξαρτώνται από το προγραμματιστικό μοντέλο που χρησιμοποιεί

η αρχιτεκτονική. Οι αρχιτεκτονικές που ακολουθούν το μοντέλο ILP64 έχουν Integer,

Long, Pointer με 64bit μέγεθος.

 

Το Linux, τα BSD και τα περισσότερα UNIXοειδή ακολουθούν το LP64 μοντέλο,

δηλαδή ο int παραμένει 32bit και μόνο ο long είναι 64bit.

Τα Windows ακολουθούν το LLP64 μοντέλο, στο οποίο και ο int και ο long

παραμένουν 32bit και μόνο ο long long είναι 64bit.

Δημοσ.
Γεια σας, έχω αρχίσει να διαβάζω για προγραμματισμό C++ και έχω κολλίσει στο εξής (επειδή διαβάζω αγγλικά guides) το signed και unsigned integer δεν έχω καταλάβει τι είναι (κατάλαβα το τον όρο του απλού int)

 

char Character or small integer. 1byte signed: -128 to 127

unsigned: 0 to 255

short int

(short) Short Integer. 2bytes signed: -32768 to 32767

unsigned: 0 to 65535

 

Σόρρυ αν είναι πολύ novice η ερώτηση... και όμως είναι.

 

Θα ήθελα να σου δώσω μια φιλική γενική συμβουλή :-)

Αν δέν έχεις κάποια βασικη γνώση Software Engineering, και ειδικότερα για την C++ γνώσεις αντικειμενοστραφή προγραμματισμού, μήν πολυκολλάς σε λεπτομέρειες γιατί είναι σίγουρο ότι θα κουραστείς και θα παραιτηθείς..

 

Αν έχεις πάρει κάποιο βιβλίο και το έχεις ξεκινησει τυφλοσούρτι απο το κεφάλαιο 1 καλύτερα βάλτο στο ράφι για λίγο...:-) Ολα τα βιβλία είναι κακογραμμένα γιατί προυποθέτουν κάποιες γνωσεις και θα σε μπερδέψουν με αναφορές σε άλλα κεφάλαια του βιβλίου και πάει λεγοντας..

 

Ξεκίνα με απλά tutorial στο ιντερνετ.. και το κυριότερο πάρε έτοιμα προγραμματακια και παίξε μαζι τους.. Πρακτική.. Δοκίμασε να φτιάξεις τα δικά σου μετά κτλ κτλ.. Ξεκινα απο τα ρηχά..

 

Στην ερώτηση σου τώρα για να καταλάβεις τί εννοώ.. Αυτή είναι η μίνιμουμ κλίμακα τιμων της standard C/C++ που πέρνει o int.. Δέν σημαίνει ότι δέν μπορεί να πάρει μεγαλύτερη τιμή..

 

Επίσης οταν γράφεις int kai signed int γράφεις το ίδιο πράγμα.. Η διαφορά μεταξύ signed και unsigned εχει να κάνει με το πώς διαβάζεται απο τον interpreter το high order bit (sign flag) του int σου.. Δηλαδη, οταν πάς και του βάζεις signed τότε ο compiler διαβάζει ένα ειδικό bit που η τιμή του 0 ή 1 βαφτίζει τον αριθμό θετικό ή αρνητικό αντίστοιχα.. Παράδειγμα...:-)

 

Ο 16bit integer αριθμός 32,767 εχει ώς εξής

 

0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

 

Το 0 μπροστά μπροστά είναι το φλαγκάκι σου που δείχνει ότι ο αριθμός είναι θετικός..

Αν τώρα θές να πάς πιο βαθιά πρέπει να κοιτάξεις την μέθοδο Two’s Complement Arithmetic.. ;)

 

http://academic.evergreen.edu/projects/biophysics/technotes/program/2s_comp.htm

 

http://www.swarthmore.edu/NatSci/echeeve1/Ref/BinaryMath/BinaryMath.html

 

και για το παράδειγμα ο -32,767 είναι..

 

1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

 

με το 1 να δηλώνει το αρνητικό πρόσημο προφανώς...

Δημοσ.
Αν δεν γράψεις τίποτα στον ορισμό της μεταβλητης τότε τι θεωρείται ;

 

Δεν μπορείς στην C/C++ να ορίσεις μεταβλητή χωρίς τύπο. Αναγκαστικά θα την ορίσεις εσύ όπως την θέλεις.

Δημοσ.

Εάν εννοείς τι είναι το:

 

>int a; 

 

χωρίς να έχει signed ή unsigned modifier μπροστά, τότε είναι signed από default. Αυτό ισχύει και για όλους τους υπόλοιπους "βασικούς" τύπους δεδομένων εκτός του char που μπορεί να είναι είτε signed ή unsigned ανάλογα με το σύστημά σου.

Δημοσ.

offtopic

 

ενα βιντεακι που πετυχα στο utube που ενας προσπαθουσε να πεισει τους αλλους οτι η JScript δεν ειναι τοσο κακη , αργη κλπ.

 

και ρωτησε αν σε μια γραμμη γραψουν "οκ" θα το παρει ο interpreter η οχι ... και φυσικα ολοι ειπαν οχι ...

αυτος :

 

>
ok
ok;
bool ok;
bool ok = false;

... wtf ?

Δημοσ.
Οπος λεει και ο απο πανω μου, δεν ειναι σιγουρο. Αν θες κατι σιγουρο

c : stdint.h

c++: cstdint

 

Η μπορεί πιο απλά, για να μην μπλέκει με άλλους τύπους, να κάνει print ένα sizeof(τύπος) και να δεί πόσα byte πιάνει ο συγκεκριμένος τύπος πχ:

 

>printf("%d", sizeof(int));

Αρχειοθετημένο

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

  • Δημιουργία νέου...