emperor318 Δημοσ. 24 Νοεμβρίου 2009 Δημοσ. 24 Νοεμβρίου 2009 Γειά σας! Λοιπόν, φτιάχνω ένα ομοίωμα μνήμης 1024 λέξεων, των 20 bits η καθεμία. Οπότε χρειάζομαι έναν τύπο δεδομένων (τ.δ.) για τα bits, ώστε να φτιάξω μία λέξη έτσι: >binDigit binWord[20] κι έναν για τη λέξη, ώστε να φτιάξω τη μνήμη έτσι: >binWord memory[1024] Είπα να ρωτήσω πριν μπλέξω με σύνθετους τύπους κλπ...
bab1s Δημοσ. 24 Νοεμβρίου 2009 Δημοσ. 24 Νοεμβρίου 2009 Όντως δε χρειάζεται να γίνει με σύνθετους τύπους. Γίνεται με typedef και με χρήση bitwise τελεστών. Θέλει βέβαια λίγη προσοχή με το endianness! Ξεκαθάρισε από την αρχή πως θα το δουλέψεις, για να προσέχεις μετά στο διάβασμα/πράξεις/τύπωμα. Εύκολα μπορεί ας πούμε να τα κάνεις όλα σωστά, αλλά επειδή δεν τα τυπώνεις όπως πρέπει να νομίζεις ότι βγάζεις λάθος αποτελέσματα!
emperor318 Δημοσ. 24 Νοεμβρίου 2009 Μέλος Δημοσ. 24 Νοεμβρίου 2009 Μπορείς να γίνεις λίγο πιο αναλυτικός;
bab1s Δημοσ. 25 Νοεμβρίου 2009 Δημοσ. 25 Νοεμβρίου 2009 Κόιταξε να δείς, εσύ χρειάζεσαι 20bit λέξεις. Οπότε οτιδήποτε χωράει 20bit σου κάνει. Κατά πάσα πιθανότητα, στο σύστημα που χρησιμοποιείς ο integer είναι 32bit. Θα μπορούσες λοιπόν να πεις typedef int binWord; Μετά από αυτό το μόνο που έχει να κάνεις είναι να προσέχεις στις πράξεις που θα κάνεις να μην ξεπερνάς τα 20bit. Αν φτιάξεις μια μάσκα 0x000FFFFF και την κάνεις & με οποιονδήποτε integer θα κρατήσεις την πληροφορία που περιέχεται στα πρώτα 20bit. Έτσι, θα το υλοποιήσεις πολύ απλά. Στη συνέχεια. η μνήμη μπορεί να είναι ένας πίνακας από binWord (δλδ int). Οπότε θα είναι πάλι εύκολο να το δουλεύεις. Μπορώ να φτιάξω και κάποιο κομμάτι κώδικα αν θες. Τα λέμε!
emperor318 Δημοσ. 25 Νοεμβρίου 2009 Μέλος Δημοσ. 25 Νοεμβρίου 2009 Α, έτσι ναι, απλά σκεφτόμουν πως ίσως έπρεπε να παίρνουν τα ψηφία μόνο τις τιμές 0 ή 1. Με enum ας πούμε: >enum {0,1} binDigit Αλλά ίσως δε χρειάζεται. Τέλος πάντων, θα δοκιμάσω και θα δω...ευχαριστώ!
bab1s Δημοσ. 25 Νοεμβρίου 2009 Δημοσ. 25 Νοεμβρίου 2009 Αυτές τις τιμές θα παίρνουν. Δε θα δίνεις σημασία στον int σαν μία τιμή, αλλά στις τιμές των ξεχωριστών bit που τον αποτελούν. Νομίζω ότι έτσι θα το υλοποιήσεις έυκολα γιατί μπορείς να εκμεταλλευτείς και τους ήδη υπάρχοντες bitwise τελεστές.
bxenos Δημοσ. 25 Νοεμβρίου 2009 Δημοσ. 25 Νοεμβρίου 2009 > typedef union { unsigned bits:20; unsigned word; } mytype; ... mytype x; x.bits = 45;
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.