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

Αρνητικοί δεκαδικοί και συμπλήρωμα ως προς 2


xipo

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

Δημοσ.

συγνωμη παλι αν αυτο το θεμα δεν σας ενδιαφερει και θα επρεπε να το κανω αλλου post αλλα φανταστηκα πως εδω θα εβρησκα απαντηση.

 

καλησπερα,

λοιπον εχω προβλημα με την αναπαρασταση αρνητικων δεκαδικων με σταθερη υποδιαστολη ειτε με την αναπαρασταση συμπληρωματος του 2 ειτε με του 1..ενω καταλαβαινω πως γινεται για ακεραιο και βρηκα και πως μπορω να το κανω για δεκαδικο με κινητη υποδιαστολη δυσκολευομαι στη σταθερη..

συγκεκριμενα εχω ως ασκηση να βρω την αναπαρασταση του -0.65 και του -5.65

παρακαλω βοηθεια για να καταλαβω πως γινεται

ευχαριστω

Δημοσ.

Σύμφωνα με το IEEE 754 η αναπαράστηση των δεκαδικών με κινητή υποδιαστολή είναι 32bit χωρισμένα σε 3 διαφορετικα μέρη: το σύμβολο (sign, 1 bit), τον εκθέτη(exponent, 8 bit) και το δεκαδικό μέρος (mantissa, 23 bit).

 

Το σύμβολο είναι είτε 0 για θετικό είτε 1 για αρνητικό.

 

Το δεκαδικό μέρος του αριθμού είναι το αθροισμα των γινομένων κάθε ψηφιου με μια δύναμη του 2:

πχ. +11.1011 x 2^3 (το σύμβολο είναι θετικό, ο αριθμός 11.1011 και ο εκθέτης 3)

Το δεκαδικό μέρος: .1011 = 1/2 + 0/4 + 1/8 + 1/16 (η απλά 1011/2^4 = 11/16 = 0.6875).

Σε συνδυασμό με το ακέραιο μέρος έχουμε: +11.1011 = +3.6875

 

O εκθέτης είναι 8 bit και τον υπολογίζεις ως εξής:

Ε + 127

πχ. 1.101 x 2^5

5+127 = 132 που σε binary είναι 10100010.

 

Παραδείγμα: Μετατροπή +6.25 σε binary

+6.25 = +110.01

+110.01 = +1.1001 * 2^2

 

Σύμβολο: 0

Eκθέτης: 2+127= 129 ή 10000001

Δεκαδικός: .1001

 

Άρα:

+6.25 = 0 10000001 10010000000000000000000 (συμπλώνεις μηδενικά για 23 ψηφία)

 

Με την ίδια διαδικασία:

-0.65 = 1 01111110 01001100110011001100110

-5.65 = 1 10000001 01101001100110011001101

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

συγκεκριμενα εχω ως ασκηση να βρω την αναπαρασταση του -0.65 και του -5.65 ...

 

Δεν είσαι πολύ σαφής στο τι θες να κάνεις.

 

Δεδομένου ενός πραγματικού αριθμού (δηλ. με υποδιαστολή - όχι ακέραιο),

είναι διαφορετικό πράγμα η γραφή του στο δυαδικό σύστημα κατά το IEEE 754 και

διαφορετικό απλώς να τον μετατρέψεις από το δεκαδικό στο δυαδικό σύστημα.

 

Στην πρώτη περίπτωση τίθενται κάποιοι περιορισμοί για το πλήθος ψηφίων της αναπαράστασης και ισχύει ένα είδος κωδικοποίησης.

Στην δεύτερη όχι (και η αναπαράσταση στις δύο περιπτώσεις δεν είναι ίδια).

 

Ο όρος "σταθερή υποδιαστολή" που χρησιμοποιείς αναφέρεται σε άλλο πράγμα, συγκεκριμένα σε αριθμούς που ΔΕΝ είναι floating point και άρα δεν έχουν σχέση με το IEEE 754.

 

Και τι εννοείς "δυσκολεύομαι στη σταθερή" ; To ακέραιo μέρος ;

 

-

Δημοσ.

Ο OP αναφέρεται σε fixed-point arithmetic (σε αντιδιαστολή με την floating-point arithmetic ή IEEE754).

 

Χρησιμοποιείται σχετικά σπάνια σε σχέση με την floating-point. Κάποιοι compilers την υποστηρίζουν πχ ο gcc (http://gcc.gnu.org/onlinedocs/gcc/Fixed_002dPoint.html).

 

Η fixed-point arithmetic είναι ένας ακέραιος ο οποίος γίνεται scale με μία σταθερά π.χ 15x10^{-2}.

 

Το ποια είναι η σταθερά εξαρτάται από τον τύπο. Οπότε ποιος είναι ο τύπος που έχεις;

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

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

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