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

αναπάράσταση ακεραίων σε δυαδική μορφή και πλήθος bit


oriok

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

Δημοσ.

Θα ήθελα να μου εξηγήσει κάποιος το εξής.Αν έχουμε έναν ακέραιο αριθμό, πόσα bit χρειαζόμαστε για να τον αναπαραστήσουμε? Σε ένα βιβλίο είδα ότι χρειαζόμαστε logn ή nlogn ψηφία (δεν θυμάμαι ακριβώς) , αλλά δεν μπορώ να καtαλάβω από που βγαίνει αυτό το συμπέρασμα.

Δημοσ.
Θα ήθελα να μου εξηγήσει κάποιος το εξής.Αν έχουμε έναν ακέραιο αριθμό, πόσα bit χρειαζόμαστε για να τον αναπαραστήσουμε? Σε ένα βιβλίο είδα ότι χρειαζόμαστε logn ή nlogn ψηφία (δεν θυμάμαι ακριβώς) , αλλά δεν μπορώ να καtαλάβω από που βγαίνει αυτό το συμπέρασμα.

 

Ρίξε μια ματιά εδώ: http://users.teicrete.gr/taxd/02/notes/arithmetics/01.bits%20and%20bytes.htm

Δημοσ.

@I_dont_need_PC δεν εννοώ αυτό που λες.Εγώ λέω π.χ. έχουμε τον ακέραιο 9 , ο οποίος σε δυαδικό είναι 1001 , δηλαδή 4 bit.Εγώ δεν καταλαβαίνω πως μπορούμε να βγάλουμε το 4 σε σχέση με καποιο λογαριθμο π.χ. log(kati) και να μας βγεί το 4.

 

@timekeeper αυτό που μου έδειξες δεν κάνει κάποια τέτοια ανάλυση με log, αλλά θα το κοιτάξω μήπως με βοηθήσει να το βγάλω μόνος μου

Δημοσ.
@I_dont_need_PC δεν εννοώ αυτό που λες.Εγώ λέω π.χ. έχουμε τον ακέραιο 9 , ο οποίος σε δυαδικό είναι 1001 , δηλαδή 4 bit.Εγώ δεν καταλαβαίνω πως μπορούμε να βγάλουμε το 4 σε σχέση με καποιο λογαριθμο π.χ. log(kati) και να μας βγεί το 4.

 

@timekeeper αυτό που μου έδειξες δεν κάνει κάποια τέτοια ανάλυση με log, αλλά θα το κοιτάξω μήπως με βοηθήσει να το βγάλω μόνος μου

 

4 είναι ο log16 με βάση το 2. Δηλαδή για να πάρεις το 16 πρέπει να υψώσεις την βάση 2 στην 4. 2^4=16. Ένας unsigned δυαδικός ακέραιος μπορεί να πάρει maχimum τιμή την 2^ν όπου ν ο αριθμός των ψηφίων του.

 

 

Μέγιστη - ελάχιστη τιμή (unsigned - μη προσημασμένοι)

 

 

 

Η μέγιστη τιμή που μπορεί να αντιστοιχηθεί σε ένα byte, προφανώς ισούται με:

 

11111111

 

ή, σε δεκαδική τιμή:

 

1 x 2^7 + 1 x 2^6 + 1 x 2^5 + 1 x 2^4 + 1 x 2^3 + 1 x 2^2 + 1 x 2^1 + 1 x 2^0 =

 

= 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 =

 

= 255

 

Γενικά, προκειμένου να βρούμε τη μέγιστη τιμή που μπορεί να λάβει ένα πλήθος n-bit, αντί να αθροίζουμε κάθε φορά όλες αυτές τις δυνάμεις του δύο, υπάρχει ένας απλούστερος τρόπος:

 

 

 

max τιμή πλήθους n-bit = 2^n - 1

 

 

 

Στο παραπάνω παράδειγμα (πλήθος 8-bit) ισχύει λοιπόν:

 

 

 

max τιμή πλήθους 8-bit = 2^8 - 1 = 256 -1 = 255

 

Αντίστοιχα η ελάχιστη τιμή ισούται με:

 

00000000, δηλαδή 0.

 

Οι παραπάνω δύο περιπτώσεις αφορούν μη προσημασμένα (unsigned) bytes. Στην περίπτωση όμως που θέλουμε οι τιμές ενός byte να φέρουν και πρόσημο (signed), ακολουθείται μία διαφορετική κωδικοποίηση.

Δημοσ.
Θα ήθελα να μου εξηγήσει κάποιος το εξής.Αν έχουμε έναν ακέραιο αριθμό, πόσα bit χρειαζόμαστε για να τον αναπαραστήσουμε? Σε ένα βιβλίο είδα ότι χρειαζόμαστε logn ή nlogn ψηφία (δεν θυμάμαι ακριβώς) , αλλά δεν μπορώ να καtαλάβω από που βγαίνει αυτό το συμπέρασμα.

 

Σε αυτο που ρωτησες ισχυει αυτο που σου ειπα (

Integer (Ακέραιος) = 4 Bytes = 32 Bits)

 

@I_dont_need_PC Εγώ δεν καταλαβαίνω πως μπορούμε να βγάλουμε το 4 σε σχέση με καποιο λογαριθμο π.χ. log(kati) και να μας βγεί το 4.

 

4 = log(10^4) = log 10000 και γενικα : Ν = log(10^N) όπου Ν ακεραιος και πιο γενικα :

N = logk(k^N) όπου logk λογαριθμος με βαση το k και Κ^Ν : κ εις την Ν δυναμη

Δημοσ.

Προγραμματιστικά, οι περισσότερες γλώσες σήμερα χρησιμοποιούν 4 bytes για να αναπαραστήσουν έναν ακέραιο αυτό σημαίνει ότι μπορούν να αναπαραστήσουν 2^(8*4) διαφορετικές τιμές. (Δηλ από -(2^(8*4))/2 έως +(2^(8*4))/2 - 1)

 

Με ένα bit μπορείς να αναπαραστήσεις 2 τιμές (0, 1)

με 2 bit μπορείς να αναπαραστήσεις 4 τιμες (00, 01, 10, 11)

κ.ο.κ.

 

Στην γενική μορφή με k bits μπορείς να αναπαραστήσεις 2^κ διαφορετικές τιμές...

 

Τώρα από τα μαθηματικά ίσως θυμάσε ότι εάν 2^κ = ν τότε Log2(N) = k;

[Και πιο γενικά Α^Β=Γ <=> Β = LogΑ(Γ)]

 

δηλάδή ο λογάριθμος είναι κάτι σαν το αντίθετο της ύψωσεις σε δύναμη

 

έτσι λοιπόν εάν θές να αναπαραστήσεις ένα συγκεκριμένο πλήθος διαφορετικών καταστάσεων (πχ ακέραιοι αριθμοί), όταν οι καταστάσεις σου είναι Ν, τότε θες (τουλάχιστον) log2(N) bit...

 

 

[Edit]: Aesmade thanx για την υπόδειξη, το διώρθωσα...

Δημοσ.

Δε μου λετε καλα με τα int long char __int8 __int16 __int32 bool (ή boolean) και τα unsing τους, με το string (ή ansiString) πως δουλεβει(?) ενοω οτι, τα παραπανω δεσμεβουν μια σιγκεκριμενη θεση(και bit) στη μνημη, το string πως δουλεβει?

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

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

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