Rumah >pembangunan bahagian belakang >C++ >Bagaimana dengan cekap menentukan sama ada nombor adalah kuasa 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:
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!