Επιστροφή στο Forum : προσημασμένος Μετρητής
έχω έναν 16bit μετρητή σε έναν μΕ, ο οποίος δουλεύει σε up count ή down count ανάλογα κάποιο σήμα που θα πάρει, αυτό που θέλω είναι να έχει πρόσημο, γίνεται με συμπλήρωμα ως προς 2? ή μόνο με συμπλήρωμα ως προς1?
δηλαδή θέλω να τον περνάω σε μία signed μεταβλητή στη C,ο c30 ξέρουμε πως αναπαριστά τους signed?
είναι λίγο σπαζοκεφαλιά και έχω κολλήσει.
Απ όσο έχω δουλεψει στην CCS αν έχεις οποιαδήποτε signed μεταβλητή (8-16-32bit) τότε το MSb του, αναφέρεται στο πρόσημο των επόμενων bit που ακολουθούν. Άρα αν έχεις εναν 16bit signed δεν ειναι 0 εώς 65535 αλλά -32768 εώς 32768.
Γιατί δεν τον κάνεις signed απ την αρχή να ξεμπερδεύεις?
όταν λες να τον κάνεις signed απο την αρχή?
ο μετρητής είναι ένας κλασικός counter στον μΕ, που ανάλογα απο ένα σήμα που παίρνει ανεβαίνει ή κατεβαίνει
Θα χρησιμοποιήσεις signed και θα κάνεις κανονικά τα --/++ όταν χρειάζεται. Η αναπαράσταση
του signed είναι σε 2's complemet.
Το πρόβλημα σου είναι στην απεικόνιση αν δεν χρησιμοποιείς sprintf κλπ
π.χ.
if(counter<0){
display('-');
display(-counter);
} else
display(counter);
}
υγ1. οι signed int 16bit είναι απο το διάστημα [-32768,+32767] (τα άκρα περιλαμβάνονται)
οι unsigned int 16bit από το διάστημα [0,65535](τα άκρα περιλαμβάνονται)
υγ2. η αναπαράσταση των signed είναι θέμα επεξεργαστή (και όλοι είναι 2's complement) και όχι compiler.
όταν λες να τον κάνεις signed απο την αρχή?
ο μετρητής είναι ένας κλασικός counter στον μΕ, που ανάλογα απο ένα σήμα που παίρνει ανεβαίνει ή κατεβαίνει
Εννοείς hardware counter?
Με λίγες δοκιμές του τύπου unsigned=signed και unsigned=-signed θα δεις πως πάει το θέμα.
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions Inc. All rights reserved.