Wie löst man die bitweisen Rechenfehler von Python?

PHPz
Freigeben: 2023-06-24 19:14:35
Original
1073 Leute haben es durchsucht

In der Python-Programmierung sind bitweise Operationen eine sehr häufige Operationsmethode zur Verarbeitung von Binärzahlen. Bei der Durchführung von Bitoperationen in Python-Code treten jedoch manchmal Fehler auf, die dazu führen, dass das Programm nicht ordnungsgemäß ausgeführt wird oder falsche Ergebnisse ausgibt. In diesem Artikel werden einige häufige Fehler bei der Python-Bitoperation vorgestellt und entsprechende Lösungen bereitgestellt.

  1. Fehler: Verwendung negativer Zahlen für bitweise Operationen

Lösung: Bitweise Operatoren in Python können nur auf ganze Zahlen angewendet werden, und wenn Sie negative Zahlen für bitweise Operationen verwenden, kann dies zu falschen Ergebnissen führen. Stellen Sie daher bei der Durchführung von Bitoperationen sicher, dass die verwendeten Werte nicht negative ganze Zahlen sind. Wenn Sie bitweise Operationen an einer negativen Zahl durchführen müssen, müssen Sie diese in ihre Komplementform umwandeln. Beispielsweise verursacht der folgende Code den Fehler:

a = -3
b = a << 2 #左移运算
print(b) #输出-12
Nach dem Login kopieren

Der obige Code verschiebt -3 um zwei Stellen nach links, was zu -12 statt der erwarteten -6 führt. Dies liegt daran, dass in Python negative Zahlen in Komplementform gespeichert werden und während der Linksverschiebungsoperation auch das höherwertige Vorzeichenbit nach links verschoben wird, was zu einem Fehler im Ergebnis führt. Um dieses Problem zu lösen, müssen Sie die negative Zahl in eine vorzeichenlose Ganzzahl umwandeln:

a = -3
a = a & 0xffffffff #将负数转换为无符号整数
b = a << 2 #左移运算
b = b & 0xffffffff #确保结果为32位无符号整数
if b >> 31: #判断结果是否为负数
    b = ~b ^ 0xffffffff #将32位无符号整数转换为补码形式
    b = -b - 1 #将负数转换为十进制数
print(b) #输出-6
Nach dem Login kopieren

Im obigen Code konvertieren wir zuerst die negative Zahl -3 in eine vorzeichenlose Ganzzahl, führen dann bitweise Operationen aus und wandeln das Ergebnis wieder in eine vorzeichenlose Zahl um ganze Zahl. Konkret führen wir zunächst eine bitweise UND-Operation für -3 und 0xffffffff durch, um eine 32-Bit-Ganzzahl ohne Vorzeichen zu erhalten. Führen Sie dann eine Linksverschiebungsoperation durch und verknüpfen Sie dann bitweise das Operationsergebnis mit 0xffffffff, um sicherzustellen, dass das Ergebnis eine 32-Bit-Ganzzahl ohne Vorzeichen ist. Wenn das Ergebnis der Linksverschiebung eine negative Zahl ist, müssen Sie sie als Nächstes in die Zweierkomplementform umwandeln und schließlich die Zweierkomplementzahl in eine Dezimalzahl umwandeln.

  1. Fehler: Bei der Verwendung bitweiser Operatoren wurde vergessen, Klammern hinzuzufügen.

Lösung: In Python ist die Rangfolge der Operatoren in Ordnung. Wenn Sie vergessen, Klammern hinzuzufügen, kann dies zu bitweisen Operationsfehlern führen. Zum Beispiel der folgende Code:

a = 3 | 4 << 2
print(a) #输出19
Nach dem Login kopieren

Das erwartete Ergebnis des obigen Codes ist 7, was das Ergebnis der Linksverschiebung von 2 Bits über 3 oder 4 ist. Da jedoch die Priorität von Bitoperatoren höher ist als die von Bitverschiebungsoperatoren, führt der Code zuerst 4 << 2 und dann 3 | (4 << 2) aus, was zu einem Fehler führt das Ergebnis. Um dieses Problem zu lösen, müssen Sie Klammern hinzufügen und die Bitverschiebungsoperation vor der Bitoperation einfügen:

a = (3 | 4) << 2
print(a) #输出28
Nach dem Login kopieren

Im obigen Code verwenden wir Klammern, um 3 | 4 als Ganzes zu behandeln, und führen dann die Linksverschiebungsoperation aus, um sie zu erhalten das erwartete Ergebnis 28 .

  1. Fehler: Bei der Verwendung bitweiser Operationen wurde vergessen, in die Binärform zu konvertieren

Lösung: Bei der Durchführung bitweiser Operationen in Python müssen Sie darauf achten, Werte in Binärform umzuwandeln, um Binärzahlen korrekt zu verarbeiten. Zum Beispiel der folgende Code:

a = 0b1010
b = a & 1011
print(bin(b)) #输出0b1000
Nach dem Login kopieren

Das erwartete Ergebnis des obigen Codes ist 0b1000, was die Binärzahl ist, die nach der bitweisen UND-Verknüpfung von a und 1011 erhalten wird. Tatsächlich ist das Ergebnis jedoch falsch, da für Bitoperationen die Dezimalzahl 1011 ohne das Präfix 0b oder 0B verwendet wird. Um dieses Problem zu lösen, müssen Sie 1011 in die Binärform umwandeln, zum Beispiel:

a = 0b1010
b = a & 0b1011
print(bin(b)) #输出0b1000
Nach dem Login kopieren

Im obigen Code konvertieren wir 1011 in die Binärform 0b1011 und führen dann Bitoperationen aus, um das erwartete Ergebnis 0b1000 zu erhalten.

Zusammenfassend lässt sich sagen, dass bitweise Operationen in Python eine sehr praktische Berechnungsmethode sind, bei der Durchführung bitweiser Operationen können jedoch Fehler auftreten. Um diese Fehler zu vermeiden, müssen Sie darauf achten, die richtigen numerischen Typen, die richtige Operatorreihenfolge und das richtige Zahlenformat zu verwenden. Wenn Sie andere häufige Fehler bei der Bitbedienung haben, teilen Sie diese bitte im Kommentarbereich mit.

Das obige ist der detaillierte Inhalt vonWie löst man die bitweisen Rechenfehler von Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage