Bir sayının 2 nin kuvveti olup olmadığını kontrol etme

+2 oy
27 Nisan 2015 androidboy Uzman Yardımcısı (1,830 puan)   sordu
Bir sayının ikinin kuvveti olup olmadığını en performanslı şekilde nasıl kontrol edebiliriz?

örnek: 512=2^9 ikinin kuvvetidir.

2 Cevap

+3 oy
27 Nisan 2015 Tahsin Dalman Uzman (7,000 puan)   cevapladı
27 Nisan 2015 androidboy seçti
 
En İyi Cevap

n ile n-1 sayısını and işlemine tabi tutarsan 2 nin üssü olan sayılar binary olarak 100....00 şeklinde devam ettiğinden n-1 sayısı da 011...1111 olduğundan sana 0 yani false sonucunu döndürecektir. 2'nin üssü olmayan sayılarda bu durum söz konusu değildir.

and işlemi 11 ise 1 diğer durumlarda 0 döndürür.

örnek: 32=2^5 binary olarak  1000002 olur.
          32-1=31 binary olarak 0111112 olur.
                               32&31=0000002=010 olur.

örnek 2: 31 binary olarak 0111112
             30 binary olarak 0111102
                          31&30=0111102=3010 olur.

bool kuvvetimi(n){
     return (n!=0) && ((n&(n-1))==0);
}

+3 oy
27 Nisan 2015 teaprogrammer Uzman Yardımcısı (1,720 puan)   cevapladı
JavaScript Fonksiyonu olarak yazdım buyur :)

 

function ikininKuvvetiMi (degisken) {
    for (; degisken > 0; degisken = degisken / 2) {
        
    }
    return (degisken == 0) ? true : false;
}
29 Nisan 2015 sugarsweetmore Uzman Yardımcısı (1,120 puan)   yorumladı
en sondaki '? true : false' kısmı gereksiz olmuş :)
...