Πώς μπορείτε να εκφράζουν δυαδικό λεκτικές στην Python;

ψήφοι
303

Πώς μπορείτε να εκφράζουν έναν ακέραιο ως ένα δυαδικό αριθμό με Python κατεξοχήν;

Ήμουν σε θέση εύκολα να βρείτε την απάντηση για το εξάγωνο:

>>> 0x12AF
4783
>>> 0x100
256

και οκταδικό:

>>> 01267
695
>>> 0100
64

Πώς μπορείτε να χρησιμοποιήσετε το κατεξοχήν να εκφράσει δυαδική στην Python;


Σύνοψη των απαντήσεων

  • Python 2.5 και νωρίτερα: να εκφράσει δυαδικό χρήση int('01010101111',2), αλλά όχι με τη γραμματική.
  • Python 2.5 και νωρίτερα: δεν υπάρχει κανένας τρόπος για να εκφράσουν δυαδικό λεκτικές.
  • Python 2.6 beta: Μπορείτε να το κάνετε όπως έτσι: 0b1100111ή 0B1100111.
  • Python 2.6 beta: Θα επιτρέψει επίσης 0o27ή 0O27(δεύτερος χαρακτήρας είναι το γράμμα O) για να αντιπροσωπεύουν ένα οκταδικό.
  • Python 3.0 beta: Ίδια με 2.6, αλλά θα επιτρέψει πλέον την παλαιότερη 027σύνταξη για octals.
Δημοσιεύθηκε 04/08/2008 στις 19:20
πηγή χρήστη
Σε άλλες γλώσσες...                            


6 απαντήσεις

ψήφοι
241

Για reference- μελλοντικές δυνατότητες Python:
Ξεκινώντας με την Python 2.6 μπορείτε να εκφράσετε δυαδικό κατεξοχήν χρησιμοποιώντας το πρόθεμα ή 0B :

>>> 0b101111
47

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

>>> bin(173)
'0b10101101'

Ανάπτυξη έκδοση της τεκμηρίωσης: Τι είναι καινούριο στην Python 2.6

Απαντήθηκε 16/08/2008 στις 13:35
πηγή χρήστη

ψήφοι
64
>>> print int('01010101111',2)
687
>>> print int('11111111',2)
255

Ενας άλλος τρόπος.

Απαντήθηκε 04/08/2008 στις 19:34
πηγή χρήστη

ψήφοι
11

Πώς μπορείτε να εκφράζουν δυαδικό λεκτικές στην Python;

Είναι όχι «δυαδικό» λεκτικές, αλλά μάλλον, «ακέραιο λεκτικές». Μπορείτε να εκφράσουν ακέραιος literals με μια δυαδική μορφή με ένα 0ακολουθούμενη από μια Bή bακολουθείται από μια σειρά από μηδενικά και μονάδες, για παράδειγμα:

>>> 0b0010101010
170
>>> 0B010101
21

Από το Python 3 docs , αυτοί είναι οι τρόποι παροχής ακέραιος literals στην Python:

Οι Ακέραιος λεκτικές περιγράφεται από τις ακόλουθες λεξιλογικό ορισμοί:

integer      ::=  decinteger | bininteger | octinteger | hexinteger
decinteger   ::=  nonzerodigit (["_"] digit)* | "0"+ (["_"] "0")*
bininteger   ::=  "0" ("b" | "B") (["_"] bindigit)+
octinteger   ::=  "0" ("o" | "O") (["_"] octdigit)+
hexinteger   ::=  "0" ("x" | "X") (["_"] hexdigit)+
nonzerodigit ::=  "1"..."9"
digit        ::=  "0"..."9"
bindigit     ::=  "0" | "1"
octdigit     ::=  "0"..."7"
hexdigit     ::=  digit | "a"..."f" | "A"..."F"

Δεν υπάρχει όριο για το μήκος του ακεραίου literals εκτός από ό, τι μπορούν να αποθηκευτούν στη διαθέσιμη μνήμη.

Να σημειωθεί ότι αρχικά μηδενικά σε ένα μη μηδενικό αριθμό δεκαδικών δεν επιτρέπονται. Αυτό είναι για την αποσαφήνιση με λεκτικές οκταδικό C-στυλ, το οποίο χρησιμοποιείται Python πριν από την έκδοση 3.0.

Μερικά παραδείγματα ακέραιος literals:

7     2147483647                        0o177    0b100110111
3     79228162514264337593543950336     0o377    0xdeadbeef
      100_000_000_000                   0b_1110_0101

Άλλαξε στην έκδοση 3.6: υπογράμμισης τώρα επιτρέπεται για λόγους ομαδοποίησης σε λεκτικές.

Άλλοι τρόποι έκφρασης δυαδικό:

Μπορείτε να έχετε τα μηδενικά και μονάδες σε ένα αντικείμενο string που μπορεί να χειριστεί (αν και μάλλον θα πρέπει να κάνει ακριβώς bitwise πράξεις στο ακέραιο στις περισσότερες περιπτώσεις) - μόλις περάσει int τη σειρά μηδενικά και μονάδες και η βάση που μετατρέπετε από (2 ):

>>> int('010101', 2)
21

Μπορείτε να έχετε προαιρετικά την 0bή 0Bπρόθεμα:

>>> int('0b0010101010', 2)
170

Αν το περάσει 0ως βάση, θα αναλάβει με βάση το 10, αν η σειρά δεν προσδιορίζει με πρόθεμα:

>>> int('10101', 0)
10101
>>> int('0b10101', 0)
21

Μετατροπή από int πίσω στην ανθρώπινη αναγνώσιμη δυαδική:

Μπορείτε να περάσετε έναν ακέραιο με κάδο για να δείτε την παράσταση συμβολοσειράς ενός δυαδικού κυριολεκτική:

>>> bin(21)
'0b10101'

Και μπορείτε να συνδυάσετε binκαι intνα πάει μπροστά και πίσω:

>>> bin(int('010101', 2))
'0b10101'

Μπορείτε να χρησιμοποιήσετε μια προδιαγραφή μορφή, καθώς, αν θέλετε να έχετε ελάχιστο πλάτος με το προηγούμενο μηδενικά:

>>> format(int('010101', 2), '{fill}{width}b'.format(width=10, fill=0))
'0000010101'
>>> format(int('010101', 2), '010b')
'0000010101'
Απαντήθηκε 14/05/2016 στις 11:58
πηγή χρήστη

ψήφοι
1

0 στο ξεκίνημα εδώ διευκρινίζει ότι η βάση είναι 8 (όχι 10), το οποίο είναι αρκετά εύκολο να δει:

>>> int('010101', 0)
4161

Αν δεν ξεκινήσετε με ένα 0, τότε python αναλαμβάνει ο αριθμός είναι βάση 10.

>>> int('10101', 0)
10101
Απαντήθηκε 21/06/2016 στις 22:48
πηγή χρήστη

ψήφοι
-1

Είμαι απόλυτα σίγουρος ότι αυτό είναι ένα από τα πράγματα που οφείλεται στις αλλαγές της Python 3.0 με ίσως κάδο () για να πάει με το εξάγωνο () και OCT ().

EDIT: απάντηση lbrandy είναι σωστή σε όλες τις περιπτώσεις.

Απαντήθηκε 04/08/2008 στις 19:27
πηγή χρήστη

ψήφοι
-1

Σε ό, τι μπορώ να πω Python, μέσα από 2.5, υποστηρίζει μόνο δεκαεξαδικό και οκταδικό λεκτικές. Έκανα βρείτε μερικές συζητήσεις σχετικά με την προσθήκη δυαδικό σε μελλοντικές εκδόσεις, αλλά τίποτα οριστικό.

Απαντήθηκε 04/08/2008 στις 19:26
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more