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
Lepaskan: 2025-01-29 19:41:09
asal
439 orang telah melayarinya

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:

bool IsPowerOfTwo(ulong number)
{
    return (number != 0) && ((number & (number - 1)) == 0);
}
Salin selepas log masuk
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 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan