Συμπλήρωμα ως προς 1

Το συμπλήρωμα ως προς 1 (Αγγλικά: 1s' complement) ενός δυαδικού αριθμού ορίζεται ως η τιμή που παίρνουμε όταν αντιστρέφουμε όλα τα ψηφία (bits) του δυαδικού αριθμού (αλλάζοντας τα 0 σε 1 και το αντίστροφο - το 0 είναι το συμπλήρωμα του 1 και το αντίθετο). Ο αριθμός αυτός λειτουργεί ως ο αρνητικός αριθμός του αρχικού αριθμού σε πράξεις όπως η δυαδική πρόσθεση. Η πράξη της αφαίρεσης "στο χαρτί" από τον άνθρωπο χρησιμοποιεί την ιδέα του "δανεικού κρατούμενου" (Αγγλικά: borrow). Συγκεκριμένα όταν το ψηφίο του μειωτέου είναι μικρότερο από το αντίστοιχο ψηφίο του αφαιρετέου παίρνουμε ένα "δανεικό κρατούμενο". Στα ψηφιακά κυκλώματα υπολογιστών τέτοιες πράξεις υλοποιούνται χρησιμοποιώντας συμπληρώματα ως προς 1 ή συμπληρώματα ως προς 2. Όμως το συμπλήρωμα ως προς 1 παρουσιάζει κάποια προβλήματα στην εφαρμογή του (όπως την ύπαρξη δύο αναπαραστάσεων του μηδέν - του θετικού και του αρνητικού μηδέν) και σπάνια χρησιμοποιείται στους υπολογιστές. Στους σύγχρονους υπολογιστές χρησιμοποιείται το συμπλήρωμα ως προς 2.Στην αναπαράσταση βάσης με συμπλήρωμα όταν το πιο σημαντικό ψηφίο (MSB: Most Significant Bit) του αριθμού είναι 1 σημαίνει ότι ο αριθμός αυτός είναι αρνητικός. Όλοι οι θετικοί αριθμοί ξεκινάνε με 0 (MSB). Για παράδειγμα ο αριθμός 25 σε 8 bits δυαδική αναπαράσταση ισούται με το 00011001, ενώ ο –25 είναι ο αριθμός 11100110 (αντιστρέφοντας όλα τα bits - συμπλήρωμα ως προς 1). Το πιο σημαντικό ψηφίο είναι 1 και δηλώνει ότι είναι αρνητικός αριθμός ο -25. Αφού το σημαντικότερο ψηφίο είναι το πρόσημο αν έχουμε 8 bits αναπαράσταση, χρησιμοποιούμε τα υπόλοιπα 8-1 = 7 bits για την αναπαράσταση του αριθμού (απόλυτης τιμής). Έτσι μπορούμε να αναπαραστήσουμε 2 7 {\displaystyle 2^{7}} θετικούς και αρνητικούς αριθμούς (από το ‑127 έως το +127). Το πρόβλημα σε αυτήν την αναπαράσταση αρνητικών αριθμών είναι ότι έχουμε δύο αριθμούς που αναπαριστούν το μηδέν. Για παράδειγμα σε ένα 8bit δυαδικό ψηφίο το 0000 0000 (είναι 0) αλλά και το 1111 1111 (είναι το -0).

 Ένας αριθμός N {\displaystyle N} με βάση r {\displaystyle r} και n {\displaystyle n} ψηφία έχει συμπλήρωμα ως προς ( r − 1 ) {\displaystyle (r-1)} το οποίο δίνεται από το ( r n − 1 ) − N {\displaystyle (r^{n}-1)-N} . Στους δυαδικούς αριθμούς r = 2 {\displaystyle r=2} και r − 1 = 1 {\displaystyle r-1=1} , έτσι έχουμε το συμπλήρωμα ως προς 1 του αριθμού N {\displaystyle N} . Το 2 n {\displaystyle 2^{n}} αναπαριστά ένα αριθμό που έχει 1 {\displaystyle 1} ως MSB και n {\displaystyle n} 0 {\displaystyle 0} . Ο αριθμός 2 n − 1 {\displaystyle 2^{n}-1} είναι ο δυαδικός αριθμός με n {\displaystyle n} 1 {\displaystyle 1} . Για παράδειγμα 2 4 = ( 10000 ) 2 {\displaystyle 2^{4}=(10000)_{2}} και 2 4 − 1 = ( 1111 ) 2 {\displaystyle 2^{4}-1=(1111)_{2}} . Το συμπλήρωμα ως προς 1 υπολογίζεται αφαιρώντας κάθε ψηφίο από το 1 {\displaystyle 1} . Επειδή 1 − 0 = 1 {\displaystyle 1-0=1} και 1 − 1 = 0 {\displaystyle 1-1=0} αρκεί η αλλαγή κάθε ψηφίου με το "συμπλήρωμά" του, δηλαδή του 1 {\displaystyle 1} σε 0 {\displaystyle 0} και του 0 {\displaystyle 0} σε 1 {\displaystyle 1} . Παρακάτω βλέπουμε όλες τους αριθμούς με βάση το συμπλήρωμα ως προς 1 σε 4 στοιχεία bit (nibble): από -7 έως 7: + − 0 0000 1111 υπάρχουν 2 αναπαραστάσεις του 0 1 0001 1110 2 0010 1101 3 0011 1100 4 0100 1011 5 0101 1010 6 0110 1001 7 0111 1000 Η πρόσθεση/αφαίρεση δυο αριθμών γίνεται κατευθείαν χρησιμοποιώντας το συμπλήρωμα ως προς 1. Κατευθείαν πρόσθεση/αφαίρεση των bit και στην περίπτωση που έχουμε υπερχείλιση, προσθέτουμε/αφαιρούμε το 1 στο αποτέλεσμα. 0001 0110 22 + 0000 0011 3 —δεν έχουμε υπερχείλιση —όχι κυκλική επαναφορά κρατούμενου στο αποτέλεσμα. 0001 1001 25 Παρακάτω έχουμε ένα παράδειγμα αφαίρεσης αριθμών: 0000 0110 6 − 0001 0011 19 1 1111 0011 −12 —υπερχείλιση − 0000 0001 1 —κυκλική επαναφορά κρατούμενου στο αποτέλεσμα. 1111 0010 −13 —Το αποτέλεσμα (6 − 19 = -13) Παρακάτω δείχνουμε ότι το συμπλήρωμα ως προς ένα ενός θετικού αριθμού είναι η αρνητική τιμή του αριθμού: Πρόσθεσε το 3 στο 19. 0001 0011 19 + 0000 0011 3 0001 0110 22 Αφαίρεσε το −3 από το 19. 0001 0011 19 − 1111 1100 −3 1 0001 0111 23 —υπερχείλιση − 0000 0001 1 —αφαίρεση κυκλικής επαναφοράς κρατούμενου στο αποτέλεσμα. 0001 0110 22 —Το αποτέλεσμα (19 − (−3) = 22). Το αρνητικό μηδέν είναι η περίπτωση όπου όλα τα bits έχουν την τιμή 1. Η πρόσθεση ή η αφαίρεση του αρνητικού μηδέν δίνει την αρχική τιμή. Προσθέτοντας αρνητικό μηδέν: 0001 0110 22 + 1111 1111 −0 1 0001 0101 21 + 0000 0001 1 —κυκλική επαναφορά κρατούμενου στο αποτέλεσμα. 0001 0110 22 —Το αποτέλεσμα είναι (22 + (−0) = 22) Αφαιρώντας το αρνητικό μηδέν: 0001 0110 22 − 1111 1111 −0 1 0001 0111 23 —αφαίρεση κυκλικής επαναφοράς κρατούμενου στο αποτέλεσμα. − 0000 0001 1 0001 0110 22 —Το αποτέλεσμα είναι (22 − (−0) = 22) Το αρνητικό μηδέν δημιουργείται εάν προσθέσουμε ένα αριθμό με τον αρνητικό του (σε συμπλήρωμα ως προς 1): 0001 0110 22 + 1110 1001 −22 1111 1111 −0 —Αρνητικό μηδέν. Το πρόβλημα με τον αρνητικό μηδέν, παρόλο που στα μαθηματικά δεν παρουσιάζει πρόβλημα σε ένα λογισμικό θα πρέπει να υπάρξει έξτρα έλεγχος. Δυαδικό σύστημα. Συμπλήρωμα ως προς 2.