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!