Rumah >pembangunan bahagian belakang >C++ >Bagaimana dengan cekap menentukan sama ada nombor adalah kuasa 2?

Bagaimana dengan cekap menentukan sama ada nombor adalah kuasa 2?

Linda Hamilton
Linda Hamiltonasal
2025-01-29 19:41:09369semak imbas

How to Efficiently Determine if a Number is a Power of 2?

bagaimana untuk menilai dengan cekap sama ada bilangan nombor adalah 2

<:> Soalan:

Bagaimana untuk menentukan dengan cekap sama ada bilangan nombor yang diberikan adalah 2 tanpa menggunakan operasi terapung atau operasi anjakan?

Jawapan:

Algoritma yang mudah dan cekap adalah seperti berikut:

Penjelasan:

<code class="language-c#">bool IsPowerOfTwo(ulong number)
{
    return (number != 0) && ((number & (number - 1)) == 0);
}</code>
bit dan komponen (&) perbandingan setiap digit, jika kedua -dua digit adalah 1, kembali 1, jika tidak 0. Dengan Minusing 1 dari nombor, kami membuat nombor binari, kedudukan minimum berkesan (bit yang ditetapkan dalam nombor asal hingga 1) ditetapkan kepada 1. Jika nombor asal adalah kuasa 2, tolak 1 akan mengeluarkan semua kedudukan di sebelah kanan kedudukan penetapan tertinggi, supaya hasil operasi dan operasi adalah 0. Sebaliknya, jika nombor asal bukan kuasa 2, selepas 1 penolakan, perwakilan binari nombor akan ditetapkan sekurang -kurangnya dua bit hingga 1, yang akan menyebabkan hasil dan operasi mengakibatkan nilai bukan zero .

Contoh:

Pertimbangkan nombor 8 (binari 1000). Kurangkan 1 untuk mendapatkan 7 (binari 0111).

<:> nota: Algoritma di atas kembali kepada 0, dan 0 bukan kuasa 2. Jika anda ingin mengecualikan 0, anda boleh mengubah suai algoritma seperti berikut:

Atas ialah kandungan terperinci Bagaimana dengan cekap menentukan sama ada nombor adalah kuasa 2?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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