# Συζήτηση για... > Ερωτήσεις Θεωρίας >  >  Αφαίρεση Δυαδικών Αριθμών

## RulerL0rd

Καλησπέρα. Έχω μπερδευτεί με την αφαίρεση δυαδικών αριθμών. Μπορεί κάποιος παρακαλώ να μου εξηγήσει γιατί έχω μπερδευτεί και δεν βρίσκω πουθενά μια ολοκάθαρη απάντηση. π.χ. θέλω να αφαιρέσω το 01101011 (αφαιρετέος) απ'το 01111001 (μειωτέος). Τα βάζω το ένα κάτω από το άλλο και μετά πώς πάει η διαδικασία. Μπορεί κάποιος να μου απαντήσει με αυτό το παράδειγμα; Πιο συγκεκριμένα έχω μπερδευτεί (δείτε στο συνημμένο)...

IMG_2742.jpg

----------


## arkoudiaris

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

----------


## RulerL0rd

Ναί, αυτός είναι ο δεύτερος τρόπος. Εγώ όμως θέλω να ξέρω αυτόν πώς γίνεται. Αλλά επίσης δεν γίνεται συμπλήρωμα ως πρός δύο εδώ νομίζω, αφού και οι δύο αριθμοί είναι θετικοί.

(2η Ερώτηση): Επίσης θέλω να ρωτήσω αν υπάρχει κάποιος πιο γρήγορος τρόπος να μετατρέψουμε δεκαδικό αριθμό σε δυαδικό (χωρίς βοήθεια calculator) εκτός από να τον παίρνουμε και να διαιρούμε συνέχεια με το 2. Για παράδειγμα αν είχαμε τους αριθμούς 23725 και -11346.

(3η Ερώτηση): Στο δεύτερο συνημμένο έχω την εκφώνησης μιας ερώτησης και στο πρώτο συνημμένο έχω την απάντηση του καθηγητή. Αυτό που δεν καταλαβαίνω εδώ είναι γιατί τους δύο αρνητικούς αριθμούς αφού τους μετατρέπει από 2s complement σε προσημασμένους τους βρίσκει σωστά, και ύστερα τους κάνει θετικούς. Γιατί τους ξανακάνει ύστερα θετικούς. Οι αριθμοί ήταν αρχικά σε 2s complement μορφή. Οπότε αυτό που έπρεπε να γίνει ήταν να τους κάνει 1s complement (αφαιρώντας 1) και ύστερα προσημασμένους (αντιστρέφοντας τα bit). Γιατί ξανακάνει αυτήν την διαδικασία ύστερα και τους μετατρέπει σε θετικούς;

----------


## yanis

δες κ αυτο το τρόπο 
http://www.youtube.com/watch?v=S9LJknZTyos

----------



----------


## gxry

Για το αρχικό ερώτημα:
Βρισκόμαστε στην τέταρτη θέση από δεξιά (αξία 2^3)
Το 1 με το δανεικό γίνεται 1+1=10 (1+1=2).
Το 10 δεν αφαιρείται από το 1 του μειωτέου. Δανειζόμαστε μια μονάδα ανώτερης τάξης και γίνεται 10+1=11 (2+1=3).
Οπότε αφαιρούμε 11-10=1 (3-2=1) και συνεχίζουμε.
 0111 1001       121
 -0110 1011    -107
-----------   ----
 0000 1110           14

Για το δεύτερο ερώτημά σου "εύκολος" τρόπος δεν θα το 'λεγα αλλά για μικρούς αριθμούς 8-9bit μπορείς να αφαιρείς από τον αρχικό αριθμό τη μεγαλύτερη δύναμη του δύο και αν αφαιρείται να σημειώνεις άσσο αν όχι 0 και συνεχίζεις με το υπόλοιπο και τις επόμενες. Π.χ. Για οκτάμπιτο <=255 ξεκινάς με το 128 και συνεχίζεις με 64,32,16,8,4,2,1 Άν το συνηθίσεις δουλεύεις γρήγορα.

Για τους προσημασμένους αριθμούς ένας γρήγορος τρόπος για να υπολογίσεις την τιμή τους είναι να θεωρήσεις το ψηφίο του προσήμου ως αντίστοιχη αρνητική αξία και όλα τα άλλα ψηφία με κανονική θετική αξία και να τα αθροίσεις.
Π.χ 1110 1100 = -128+64+32+8+4 = -128+108 = -20

----------



----------


## RulerL0rd

Ευχαριστώ και τον yanis και τον gxry. Τα δύο πρώτα ερωτήματα μου τα κατάλαβα πολύ καλά. Με βοήθησε και το βίντεο πολύ.

Παραμένει όμως η τρίτη ερώτηση μου προς το παρόν, γιατί δεν καταλαβαίνω αυτό το περίεργο που έκανε στη λύση του ο καθηγητής (διαβάστε στο πιο πάνω μου ποστ για την τρίτη μου ερώτηση).


Edit: Νομίζω κατάλαβα μόνος μου την απάντηση στην τρίτη ερώτηση μου. Οι αριθμοί λέει πώς είναι σε μορφή 2s complement. Εγώ πίστευα πώς είναι σε μορφή προσημασμένου αριθμού έτσι κρατούσα στους αρνητικούς αριθμούς το most significant bit ως 1, γι'αυτό δεν μπορούσα να το καταλάβω. Αλλά τώρα νομίζω πώς είμαι σωστός.

----------


## arkoudiaris

λοιπον αυτο που γινεται ειναι το εξης 

στο πατερν οτι οι δυαδικοι αριθμοι ειναι στην μορφη συμπληρωματος ως προς 2 εχουμε οτι 
1)αν ο αριθμος ειναι θετικος τοτε αρκει για καθε bit να πολλαπλασιασουμε με την αντιστοιχη ταξη ν (*2^ν)

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

----------



----------


## arkoudiaris

> Ναί, αυτός είναι ο δεύτερος τρόπος. Εγώ όμως θέλω να ξέρω αυτόν πώς γίνεται. Αλλά επίσης δεν γίνεται συμπλήρωμα ως πρός δύο εδώ νομίζω, αφού και οι δύο αριθμοί είναι θετικοί.



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

----------


## RulerL0rd

Πολύ ωραίος φίλε. Κατάλαβα. : )

----------

