Bagaimana untuk menyelesaikan ralat aritmetik bitwise Python?

PHPz
Lepaskan: 2023-06-24 19:14:35
asal
1073 orang telah melayarinya

Dalam pengaturcaraan Python, operasi bitwise ialah kaedah operasi yang sangat biasa digunakan untuk mengendalikan nombor binari. Walau bagaimanapun, apabila menjalankan operasi bit dalam kod Python, ralat kadangkala berlaku, menyebabkan atur cara tidak berjalan dengan betul atau menghasilkan hasil yang salah. Artikel ini akan memperkenalkan beberapa ralat operasi bit Python biasa dan menyediakan penyelesaian yang sepadan.

  1. Ralat: Menggunakan nombor negatif untuk operasi bitwise

Penyelesaian: Operator bitwise dalam Python hanya boleh digunakan pada integer dan jika anda menggunakan nombor negatif untuk operasi bitwise, ia mungkin membawa kepada keputusan yang salah. Oleh itu, semasa menjalankan operasi bit, pastikan nilai yang digunakan adalah integer bukan negatif. Jika anda perlu melakukan operasi bitwise pada nombor negatif, anda perlu menukarnya kepada bentuk pelengkapnya. Contohnya, kod berikut menyebabkan ralat:

a = -3
b = a << 2 #左移运算
print(b) #输出-12
Salin selepas log masuk

Kod di atas beralih -3 ke kiri dua tempat, menghasilkan -12 dan bukannya -6 yang dijangkakan. Ini kerana dalam Python, nombor negatif disimpan dalam bentuk pelengkap, dan semasa operasi anjakan kiri, bit tanda tertib tinggi juga akan dialihkan ke kiri, mengakibatkan ralat dalam keputusan. Untuk menyelesaikan masalah ini, anda perlu menukar nombor negatif kepada integer tidak ditandatangani:

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
Salin selepas log masuk

Dalam kod di atas, kami menukar nombor negatif -3 kepada integer tidak ditandatangani dahulu, kemudian melakukan operasi bitwise dan menukar hasilnya kembali kepada nombor bertanda. integer. Khususnya, kami mula-mula melakukan operasi AND bitwise pada -3 dan 0xffffffff untuk mendapatkan integer tak bertanda 32-bit. Kemudian lakukan operasi anjakan kiri, dan kemudian bitwise DAN hasil operasi dengan 0xffffffff untuk memastikan bahawa hasilnya ialah integer tidak bertanda 32-bit. Seterusnya, jika hasil anjakan kiri ialah nombor negatif, anda perlu menukarnya kepada bentuk pelengkap dua, dan akhirnya menukar nombor pelengkap dua kepada nombor perpuluhan.

  1. Ralat: Terlupa menambah kurungan apabila menggunakan operator bitwise

Penyelesaian: Dalam Python, keutamaan pengendali adalah teratur Jika anda terlupa menambah kurungan, ia mungkin menyebabkan ralat operasi bitwise. Contohnya, kod berikut:

a = 3 | 4 << 2
print(a) #输出19
Salin selepas log masuk

Hasil jangkaan kod di atas ialah 7, iaitu hasil peralihan kiri 2 bit di atas 3 atau 4. Tetapi sebenarnya, kerana keutamaan pengendali bit adalah lebih tinggi daripada operator anjakan bit, kod tersebut akan melaksanakan 4 << 2, dan kemudian melaksanakan 3 | (4 << 2), mengakibatkan ralat dalam hasilnya. Untuk menyelesaikan masalah ini, anda perlu menambah kurungan dan meletakkan operasi anjakan bit sebelum operasi bit:

a = (3 | 4) << 2
print(a) #输出28
Salin selepas log masuk

Dalam kod di atas, kami menggunakan kurungan untuk merawat 3 | 4 secara keseluruhan, dan kemudian melakukan operasi anjakan kiri untuk mendapatkan hasil yang diharapkan 28 .

  1. Ralat: Terlupa untuk menukar kepada bentuk binari apabila menggunakan operasi bitwise

Penyelesaian: Apabila melakukan operasi bitwise dalam Python, anda perlu memberi perhatian untuk menukar nilai ke dalam bentuk binari untuk mengendalikan nombor binari dengan betul. Sebagai contoh, kod berikut:

a = 0b1010
b = a & 1011
print(bin(b)) #输出0b1000
Salin selepas log masuk

Hasil jangkaan kod di atas ialah 0b1000, iaitu nombor perduaan yang diperolehi selepas operasi bitwise AND a dan 1011. Tetapi sebenarnya, kerana nombor perpuluhan 1011 tanpa awalan 0b atau 0B digunakan untuk operasi bit, hasilnya tidak betul. Untuk menyelesaikan masalah ini, anda perlu menukar 1011 kepada bentuk binari, contohnya:

a = 0b1010
b = a & 0b1011
print(bin(b)) #输出0b1000
Salin selepas log masuk

Dalam kod di atas, kami menukar 1011 kepada bentuk binari 0b1011 dan kemudian melakukan operasi bit untuk mendapatkan hasil yang diharapkan 0b1000.

Ringkasnya, operasi bitwise dalam Python ialah kaedah pengiraan yang sangat praktikal, tetapi ralat cenderung berlaku apabila melakukan operasi bitwise. Untuk mengelakkan ralat ini, anda perlu memberi perhatian untuk menggunakan jenis angka, susunan operator dan bentuk nombor yang betul. Jika anda mempunyai ralat operasi bit biasa yang lain, sila kongsikannya di kawasan komen.

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan ralat aritmetik bitwise Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan