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

Μετατροπή αρνητικών δυαδικών σε δεκαεξαδικούς.


timekeeper

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

Δημοσ.

Ας υποθέσουμε ότι έχουμε τον binary αριθμό 1111 1111 (dec = -1) . O αντίστοιχος hexademical θα ήταν ο FF? Υπάρχει τρόπος με μια ματιά να καταλαβαίνω αν ένας hex είναι αρνητικός ή θετικός (όπως με το πρώτο ψηφίο στους binary) ή πρέπει να το ψυλλιάζομαι από το magnitude του αριθμού (πχ ένας 8bit ακέραιος δεν μπορεί να είναι πάνω από 0111 1111 = 127 ενώ το FF = 255);

Δημοσ.

Τυπικά, δεν υπάρχουν αρνητικοί δυαδικοί / δεκαεξαδικοί. Ποιος σου είπε ότι ένας 8μπιτος ακέραιος δεν είναι ποτέ πάνω από 127; Είναι και παραείναι. Στη C, για παράδειγμα, δηλώνεται ως unsigned char, και λαμβάνει τιμές από 0-255. Στην Pascal δηλώνεται ως Byte, κοκ.

 

Αυτό που περιγράφεις είναι θέμα ερμηνείας, λέγεται two's complement, και αφορά στο πιο διαδεδομένο σύστημα αριθμητικής διαχείρισης μιας ακολουθίας δυαδικών ψηφίων. Με άλλα λόγια, ισχύει κι εδώ το "ότι δηλώσεις είσαι...".

 

Για να απαντήσω στο ερώτημά σου, το εάν ένας hex είναι "αρνητικός" φαίνεται από το high-order nibble: Εάν είναι >= 8 τότε είναι...

Δημοσ.

Πρώτο bit = 1 <=>

πρώτο δεκαεξαδικό ψηφίο >= 8.

 

Φυσικά ο αριθμός FFF δεν είναι αρνητικός, γιατί θα έπρεπε να γραφεί 0FFF => θετικός που πιάνει 2 bytes (τουλάχιστον).

 

(edit: καλά κάτι παθαίνει είτε το φόρουμ είτε ο firefox μου, το post του fromaz δεν το είδα παρά μόνο αφού απάντησα...)

Δημοσ.
Τυπικά, δεν υπάρχουν αρνητικοί δυαδικοί / δεκαεξαδικοί. Ποιος σου είπε ότι ένας 8μπιτος ακέραιος δεν είναι ποτέ πάνω από 127; Είναι και παραείναι. Στη C, για παράδειγμα, δηλώνεται ως unsigned char, και λαμβάνει τιμές από 0-255. Στην Pascal δηλώνεται ως Byte, κοκ.

 

Αυτό που περιγράφεις είναι θέμα ερμηνείας, λέγεται two's complement, και αφορά στο πιο διαδεδομένο σύστημα αριθμητικής διαχείρισης μιας ακολουθίας δυαδικών ψηφίων. Με άλλα λόγια, ισχύει κι εδώ το "ότι δηλώσεις είσαι...".

 

Για να απαντήσω στο ερώτημά σου, το εάν ένας hex είναι "αρνητικός" φαίνεται από το high-order nibble: Εάν είναι >= 8 τότε είναι...

 

Σε ευχαριστώ για την απάντηση. Διορθώνω: Εννοούσα ότι ένας signed 8bit ακέραιος δεν μπορεί να είναι πάνω από 127. Αν κατάλαβα καλά εννοείς ότι τα τέσσερα πρώτα bits αν είναι 1000 και πάνω. Σε ευχαριστώ.

 

 

-----Προστέθηκε 17/10/2008 στις 04 : 53 : 34-----

 

 

Πρώτο bit = 1 <=>

πρώτο δεκαεξαδικό ψηφίο >= 8.

 

Φυσικά ο αριθμός FFF δεν είναι αρνητικός, γιατί θα έπρεπε να γραφεί 0FFF => θετικός που πιάνει 2 bytes (τουλάχιστον).

 

(edit: καλά κάτι παθαίνει είτε το φόρουμ είτε ο firefox μου, το post του fromaz δεν το είδα παρά μόνο αφού απάντησα...)

 

Και εγώ το δικό σου τώρα το είδα. Ευχαριστώ.

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

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

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