In Python können Sie Zahlen und Strings sowohl binär (bin), oktal (oct) und hexadezimal (hex) als auch dezimal verarbeiten. Sie können auch ineinander umgerechnet werden.
Dieser Artikel hat folgenden Inhalt.
- Schreiben Sie ganze Zahlen in binärer, oktaler und hexadezimaler Schreibweise
- Konvertieren Sie eine Zahl in eine binäre, oktale und hexadezimale Zeichenfolge
- bin(), okt(), hex()
- format(), str.format(), f-Strings
- Wandeln Sie eine negative Ganzzahl in eine Zeichenfolge in Zweierkomplementdarstellung um
- Konvertieren Sie eine binäre, oktale und hexadezimale Zeichenfolge in einer Zahl
- Anwendungsbeispiele
- Binäre String-Arithmetik
- Konvertieren Sie zwischen Binär-, Oktal- und Hexadezimalzahlen
Im following Artikel FINDEN SIE sterben Grundlagen der Konvertierung zwischen dem String (str) und der Zahl (int, float).
Schreiben Sie ganze Zahlen in binärer, oktaler und hexadezimaler Schreibweise
Durch Hinzufügen der Präfixe 0b, 0o und 0x can int-Zahlen vom Typ Integer binär, oktal bzw. hexadezimal geschrieben werden. Die Ausgabe von print() erfolgt in Dezimalschreibweise.
bin_num = 0b10
oct_num = 0o10
hex_num = 0x10
print(bin_num)
print(oct_num)
print(hex_num)
# 2
# 8
# 16
Sie können auch die Großbuchstaben 0B, 0O und 0X verwenden.
Bin_num = 0B10
Oct_num = 0O10
Hex_num = 0X10
print(Bin_num)
print(Oct_num)
print(Hex_num)
# 2
# 8
# 16
Auch mit einem Präfix ist der Typ eine ganze Zahl int.
print(type(bin_num))
print(type(oct_num))
print(type(hex_num))
# <class 'int'>
# <class 'int'>
# <class 'int'>
print(type(Bin_num))
print(type(Oct_num))
print(type(Hex_num))
# <class 'int'>
# <class 'int'>
# <class 'int'>
Da sie int sind, können sie wie gewohnt bedient werden.
result = 0b10 * 0o10 + 0x10
print(result)
# 32
In Python 3.6 und höher können Sie Unterstriche _ in Zahlen einfügen. Das Wiederholen des Unterstrichs _ löst einen Fehler aus, aber SIE können beliebig viele einfügen, wenn er nicht wiederholt wird.
Bei vielen kann der Unterstrich _ als Trennzeichen verwendet werden. Zum Beispiel ist es einfacher zu lesen, wenn Sie alle vier Ziffern _ eingeben.
print(0b111111111111 == 0b1_1_1_1_1_1_1_1_1_1_1_1)
# True
bin_num = 0b1111_1111_1111
print(bin_num)
# 4095
Wandeln Sie eine Zahl in eine binäre, oktale und hexadezimale Zeichenfolge um
SIE can sterben following Funktionen verwenden, um eine Zahl in eine binäre, oktale oder hexadezimale Zeichenfolge umzuwandeln.
- Eingebaute Funktionen bin(), oct(), hex()
- Eingebaute Funktion format(), String-Methode str.format(), f-strings
Außerdem WIRD beschrieben, wie man einen String in Zweierkomplementdarstellung für einen negativen Wert erhält.
bin(), okt(), hex()
Die integrierten Funktionen bin(), oct() und hex() können verwendet werden, um eine Zahl in eine binäre, oktale und hexadezimale Zeichenfolge umzuwandeln. Diese Funktionen geben eine Zeichenfolge mit den Präfixen 0b, 0o bzw. 0x zurück.
i = 255
print(bin(i))
print(oct(i))
print(hex(i))
# 0b11111111
# 0o377
# 0xff
print(type(bin(i)))
print(type(oct(i)))
print(type(hex(i)))
# <class 'str'>
# <class 'str'>
# <class 'str'>
Wenn SIE das Präfix nicht benötigen, verwenden SIE Slice [2:], um die einzelnen Zeichenfolgen zu extrahieren, oder verwenden SIE format() wie im Folgenden beschrieben.
print(bin(i)[2:])
print(oct(i)[2:])
print(hex(i)[2:])
# 11111111
# 377
# ff
Wenn Sie in eine Dezimalzeichenfolge konvertieren möchten, verwenden Sie str().
print(str(i))
# 255
print(type(str(i)))
# <class 'str'>
format(), str.format(), f-Strings
Die eingebaute Funktion format(), die String-Methode str.format() und f-strings können auch used Werden, um Eine Zahl in einen binären, oktalen oder hexadezimalen String umzuwandeln.
Durch die Angabe von b, o und x im Formatspezifikations-String des zweiten Arguments von format() kann eine Zahl in einem binären, oktalen bzw. hexadezimalen String konvertiert werden.
print(format(i, 'b'))
print(format(i, 'o'))
print(format(i, 'x'))
# 11111111
# 377
# ff
print(type(format(i, 'b')))
print(type(format(i, 'o')))
print(type(format(i, 'x')))
# <class 'str'>
# <class 'str'>
# <class 'str'>
Wenn SIE die Zeichenfolge mit dem Präfix 0b, 0o, 0x erhalten möchten, fügen Sie # zur Formatspezifikationszeichenfolge hinzu.
print(format(i, '#b'))
print(format(i, '#o'))
print(format(i, '#x'))
# 0b11111111
# 0o377
# 0xff
Es ist auch möglich, Null (0) mit beliebig vielen Ziffern einzugeben. Beachten Sie, dass beim Auffüllen von Null mit Einem Präfix auch die Anzahl der Zeichen für das Präfix (zwei Zeichen) berücksichtigt werden müssen.
print(format(i, '08b'))
print(format(i, '08o'))
print(format(i, '08x'))
# 11111111
# 00000377
# 000000ff
print(format(i, '#010b'))
print(format(i, '#010o'))
print(format(i, '#010x'))
# 0b11111111
# 0o00000377
# 0x000000ff
Die String-Methode str.format() kann für dieselbe Konvertierung verwendet werden.
print('{:08b}'.format(i))
print('{:08o}'.format(i))
print('{:08x}'.format(i))
# 11111111
# 00000377
# 000000ff
In Python 3.6 oder höher können Sie auch die F-Strings (f’xxx‘) verwenden.
print(f'{i:08b}')
print(f'{i:08o}')
print(f'{i:08x}')
# 11111111
# 00000377
# 000000ff
Wandeln Sie eine negative Ganzzahl in eine Zeichenfolge in Zweierkomplementdarstellung um
Bei Verwendung von bin() oder format() werden negative Ganzzahlen in absolute Werte mit Minuszeichen umgewandelt.
x = -9
print(x)
print(bin(x))
# -9
# -0b1001
In Python werden bitweise Operationen mit negativen Ganzzahlen in der Zweierkomplementdarstellung durchgeführt. If you also eine Zeichenfolge erhalten möchten, die in der Zweierkomplementdarstellung hören WIRD, nehmen SIE das bitweise Und & der maximal erforderliche Anzahl von Ziffern, zum Beispiel 0b1111 (= 0xf ) für 4 Bit, 0xff für 8 Bit und 0xffff für 16 Bit.
print(bin(x & 0xff))
print(format(x & 0xffff, 'x'))
# 0b11110111
# fff7
Konvertieren Sie eine binäre, oktale und hexadezimale Zeichenfolge in einer Zahl
int()
Verwenden Sie die integrierte Funktion int(), um eine binäre, oktale und hexadezimale Zeichenfolge in eine Zahl umzuwandeln.
Sie können einen binären, oktalen und hexadezimalen String basierend auf dem Radix mit int(string, radix) in einen Integer umwandeln. If radix weggelassen WIRD, WIRD davon ausgegangen, dass es sich um eine Dezimalzahl handelt.
print(int('10'))
print(int('10', 2))
print(int('10', 8))
print(int('10', 16))
# 10
# 2
# 8
# 16
print(type(int('10')))
print(type(int('10', 2)))
print(type(int('10', 8)))
print(type(int('10', 16)))
# <class 'int'>
# <class 'int'>
# <class 'int'>
# <class 'int'>
Wenn Sie Radix auf 0 setzen, wird es entsprechend dem Präfix konvertiert (0b, 0o, 0x oder 0B, 0O, 0X).
print(int('0b10', 0))
print(int('0o10', 0))
print(int('0x10', 0))
# 2
# 8
# 16
print(int('0B10', 0))
print(int('0O10', 0))
print(int('0X10', 0))
# 2
# 8
# 16
Wenn die Basis 0 ist, wird eine Zeichenfolge ohne Präfix in eine Dezimalzahl umgewandelt. Beachten Sie in diesem Fall, dass ein Fehlerauftritt, wenn der Anfang (linke Seite) mit 0 aufgefüllt WIRD.
print(int('10', 0))
# 10
# print(int('010', 0))
# ValueError: invalid literal for int() with base 0: '010'
In anderen Fällen kann der mit 0 aufgefüllte String konvertiert werden.
print(int('010'))
# 10
print(int('00ff', 16))
print(int('0x00ff', 0))
# 255
# 255
Ein Fehler WIRD ausgelöst, WENN sterben Schriftzeichen nicht basierend auf dem angegebenen Radix oder Präfix konvertiert werden können.
# print(int('ff', 2))
# ValueError: invalid literal for int() with base 2: 'ff'
# print(int('0a10', 0))
# ValueError: invalid literal for int() with base 0: '0a10'
# print(int('0bff', 0))
# ValueError: invalid literal for int() with base 0: '0bff'
Anwendungsbeispiele
Binäre String-Arithmetik
Wenn Sie beispielsweise einen binären String mit dem Präfix 0b operieren möchten, können Sie ihn einfach in eine Ganzzahl int konvertieren, etwas operieren und ihn dann wieder in den String strkonvertieren.
a = '0b1001'
b = '0b0011'
c = int(a, 0) + int(b, 0)
print(c)
print(bin(c))
# 12
# 0b1100
Konvertieren Sie zwischen Binär-, Oktal- und Hexadezimalzahlen
Es ist auch einfach, binäre, oktale und hexadezimale Zeichenfolgen ineinander umzuwandeln. Einmal in eine Zahl int konvertiert, kann sie in einen String beliebiger Formate konvertiert werden.
Nullauffüllung und Präfixe können durch sterben Formatierungsspezifikationszeichenfolge gesteuert Werden.
a_0b = '0b1110001010011'
print(format(int(a, 0), '#010x'))
# 0x00000009
print(format(int(a, 0), '#010o'))
# 0o00000011