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

Python μετατροπή αρνητικών.


taslikos

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

Καλημέρα στο φόρουμ..

 

Θα ήθελα κάποιος να βοηθήσει στην κατασκευή κώδικα που θα μετατρέπει έναν αριθμο από δεκαδικο(αρνητικό) σε δυαδικό σύστημα. Το πρόβλημα μου είναι πως με την εντολή bin() ουσιαστικά τυπώνει τον σχετικό αριθμό στο δυαδικό με ένα μειων μπροστά που είναι εντελώς διαφορετικό από την μέθοδο της αντιστροφής που γνωρίζω.

 

Έχω βρει πολλές λύσεις στο Ίντερνετ αλλά καμία τους δεν κατάλαβα πως λειτουργούν γιατί χρησιμοποιούν πολύπλοκες εντολές (είμαι νέος στην python).

 

Επίσης θα ήθελα να μου πείτε πως μπορώ να κάνω να τυπώνει πχ το -3 ως 101 στο δυαδικό διότι με όλες τις λύσεις το έβγαζε ως 01 που έβρισκα στο διαδίκτυο. Δηλαδή να έχω τον ελάχιστο δυνατό αριθμό ψηφίων στο δυαδικό.

 

Τέλος υπάρχει άλλη μέθοδος για την μετατροπή εκτός την αντίστροφη ψηφίων;;

 

Ευχαριστώ!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν έχω δουλέψει πολύ με python, αλλά αν το θεωρείς ως string και βάζεις τον άσσο μπροστά? Απο unsigned να το κάνεις signed δηλαδή.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το προσπάθησα αυτό να βάλω τον άσσο μπροστά αλλά δεν κατάφερα... γνωρίζω πολλές εντολές αλλά τις εντελώς βασικές τους χρήσεις ακόμη.. αν μπορούσες να βοηθήσεις γι το πως βάζω τον άσσο μπροστά θα σου ήμουν ευγνώμων.

Και εκτός από αυτό το πρόβλημα έχω κολλήσει στο πιο βασικό την μετατροπή αρνητικού..

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν έχω δουλέψει python, στο stackoverflow δεν είδες κάτι?

 

Απλά σαν λογική σε άλλες γλώσσες έτσι γίνεται.

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

Κάπως έτσι πιστεύω θα λυθεί το θέμα:

 

text = 'abcdefg'

text = text[:1] + 'Z' + text[2:]

 

Αλλά δεν καταλαβαίνω την δεύτερη εντολή. Οι αριθμοί 1,2 σε τι αντιστοιχούν;; πως θα επιλέξω την θέση που θα αλλάξω το γράμμα του "text" με το γράμμα z?

 

Edit: από ότι κατάλαβα το 1 είναι η θέση του γράμματος στο στρινγκ δηλαδή το 2ο γράμμα μιας και ξεκινώ από το 0 και το 2 είναι του τελευταίου γράμματος που επιλέγω δηλ το 3ο

Το z όμως ποιο έρχεται να αντικαταστήσει;; το 2ο η το 3ο;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το πρόβλημα μου είναι πως με την εντολή bin() ουσιαστικά τυπώνει τον σχετικό αριθμό στο δυαδικό με ένα μειων μπροστά που είναι εντελώς διαφορετικό από την μέθοδο της αντιστροφής που γνωρίζω.

 

Ποια είναι η μέθοδος αντιστροφής που γνωρίζεις;

 

Δεν αναφέρεις τίποτα σχετικό οπότε ίσως δε γνωρίζεις σχετικά, αλλά δεν είναι αρκετό να πεις "δυαδικό". Ποια αναπαράσταση; One's complement or two's complement?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ποια είναι η μέθοδος αντιστροφής που γνωρίζεις;

 

Δεν αναφέρεις τίποτα σχετικό οπότε ίσως δε γνωρίζεις σχετικά, αλλά δεν είναι αρκετό να πεις "δυαδικό". Ποια αναπαράσταση; One's complement or two's complement?

Η μέθοδος που γνωρίζω είναι αν πχ θέλω στο δυαδικό τον αριθμό -α βρίσκω την απεικόνιση στο δυαδικό της απόλυτης τιμής του δηλαδή του α και είναι πχ της μορφής 0110

Τότε από τα δεξιά προς τα αριστερά κρατώ ίδια τα νούμερα έως το πρώτο άσσο που συναντώ και αντιστρέψω τα αλλά. Δηλ το -α θα είναι 1010.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Η μέθοδος που γνωρίζω είναι αν πχ θέλω στο δυαδικό τον αριθμό -α βρίσκω την απεικόνιση στο δυαδικό της απόλυτης τιμής του δηλαδή του α και είναι πχ της μορφής 0110

Τότε από τα δεξιά προς τα αριστερά κρατώ ίδια τα νούμερα έως το πρώτο άσσο που συναντώ και αντιστρέψω τα αλλά. Δηλ το -α θα είναι 1010.

 

Δεν την ξέρω αυτή τη μέθοδο (ή αν κάποτε την είδα, δεν τη θυμάμαι) και ούτε καταλαβαίνω με ποιά λογική αυτό είναι αναπαράσταση αρνητικού. Σίγουρα δεν είναι ούτε one's ούτε two's complement, οπότε "η επιστήμη σηκώνει τα χέρια ψηλά".

 

Εκτός από τη μπακάλικη μέθοδο ξέρεις τίποτα περισσότερο επί του θέματος; Με ποιά λογική υποτίθεται ότι αυτό είναι αναπαράσταση ή κάτι άλλο; Γενικά η αναπαράσταση (που δεν είναι καν μία) δεν είναι έτσι επειδή είναι γραμμένο σε πέτρινες πλάκες, πρέπει να έχει κάποια μαθηματική λογική. Αυτό που λες δε βλέπω ποιά λογική έχει.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν την ξέρω αυτή τη μέθοδο (ή αν κάποτε την είδα, δεν τη θυμάμαι) και ούτε καταλαβαίνω με ποιά λογική αυτό είναι αναπαράσταση αρνητικού. Σίγουρα δεν είναι ούτε one's ούτε two's complement, οπότε "η επιστήμη σηκώνει τα χέρια ψηλά".

 

Εκτός από τη μπακάλικη μέθοδο ξέρεις τίποτα περισσότερο επί του θέματος; Με ποιά λογική υποτίθεται ότι αυτό είναι αναπαράσταση ή κάτι άλλο; Γενικά η αναπαράσταση (που δεν είναι καν μία) δεν είναι έτσι επειδή είναι γραμμένο σε πέτρινες πλάκες, πρέπει να έχει κάποια μαθηματική λογική. Αυτό που λες δε βλέπω ποιά λογική έχει.

Μπορείς να μου πεις τον δικό σου τρόπο μετατροπής; διότι όσο και να έψαξα δεν βρήκα άλλον τρόπο εκτός από την αντίστροφη.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ποια είναι η μέθοδος αντιστροφής που γνωρίζεις;

 

Δεν αναφέρεις τίποτα σχετικό οπότε ίσως δε γνωρίζεις σχετικά, αλλά δεν είναι αρκετό να πεις "δυαδικό". Ποια αναπαράσταση; One's complement or two's complement?

Μάλλον σαν συμπλήρωμα ως προς δύο το ξέρει, αλλά μπέρδεψε το αριστερά προς τα δεξιά?

  • Like 2
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μάλλον σαν συμπλήρωμα ως προς δύο το ξέρει, αλλά μπέρδεψε το αριστερά προς τα δεξιά?

Ναι συμπλήρωμα ως προς δυο λέγεται ο τρόπος, εγώ από δεξιά προς αριστερά το ξέρω..

Τελικά γνωρίζει κανείς κάποιον τρόπο εκτός του συμπληρώματος;;

Αν και εγώ δεν ξέρω python με ένα search βρήκα αυτό :

http://stackoverflow.com/questions/21871829/twos-complement-of-numbers-in-python

 

Δές αν σου κάνει

Θα το ψάξω και θα σας πω.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ναι συμπλήρωμα ως προς δυο λέγεται ο τρόπος, εγώ από δεξιά προς αριστερά το ξέρω..

Τελικά γνωρίζει κανείς κάποιον τρόπο εκτός του συμπληρώματος;;

 

Θα το ψάξω και θα σας πω.

Ναι, my bad, έτσι είναι.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μπορείς να μου πεις τον δικό σου τρόπο μετατροπής; διότι όσο και να έψαξα δεν βρήκα άλλον τρόπο εκτός από την αντίστροφη.

 

Τελικά σωστά το είχες το αποτέλεσμα, απλά εγώ brainfart διαβάζοντας την περιγραφή και νόμιζα πως ήταν λάθος. Λοιπόν για two's complement υπάρχουν διάφοροι τρόποι να φτάσεις στο αποτέλεσμα, π.χ. είσοδος = 6 (110).

 

1. Παίρνεις το one's complement (αντιστρέφεις τα πάντα) και μετά προσθέτεις 1. 0110 => 1001 => 1010. Το επιπλέον 0 μπροστά από το αρχικό 110 είναι σημαντικό, αντιπροσωπεύει το πρόσημο + που μετά γίνεται -.

 

2. Αφαιρείς την είσοδο από την αμέσως επόμενη μεγαλύτερη δύναμη του 2 ανάλογα με το πόσα bits θέλεις. 110 => 10000 - 110 => 1010. 10000 επειδή χρειαζόμαστε 4 bits για το -6 άρα η μεγαλύτερη δύναμη του 2 είναι 2^5.

 

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

 

Οι μπακαλιές καλές για να βγάζεις αποτέλεσμα, αλλά άμα δεν ξέρεις γιατί τις κάνεις έχεις θέματα.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...