Prikaz jedne poruke
Stara 5.3.2008, 11:24   #1
Stevvan
Veteran
 
Član od: 17.12.2005.
Lokacija: Zarkovo, Beograd
Poruke: 1.114
Zahvalnice: 97
Zahvaljeno 179 puta na 104 poruka
Slanje poruke preko MSN-a korisniku Stevvan Slanje poruke preko Skypea korisniku Stevvan
Određen forumom Dobijanje broja koji je stepen od 2

Od skora krenuo ozbiljnije da ucim ogl, pa me je deo za ucitavanje textura naterao da napisem jednu f-ju koja radi sledece: Uzima neki broj i posle vraca najblizi broj koji je stepen od 2. Npr za brojeve od 9 do 15 to ce biti 16, za brojeve od 17 do 31 to ce biti 32 itd... Voleo bih da vidim kako bi neko od vas ovo resio, evo f-je koju sam ja napisao:

Kod:
unsigned int get_power_of_two(unsigned int number)
{
    if ((number&(number-1)) == 0) //Ovo proverava dal je broj vec stepen od 2
    {
        return number;
    }
    else
    {
        const int len = sizeof(int)*8;
        bool number_bits[len]; //pravi se array za bitove od kojih se broj sastoji 

        for (int n = 0; n< len; n++)
        {
            number_bits[n] = 0;
        }

        //Ovaj deo cita uneti broj i u array smesta 1 ako ili 0 tamo gde treba
        //Vazno je reci da se brojevi postavljaju od nazad zbog lakseg pronalazenja stepena 2

        int counter = 0; 
        while (number!=0)
        {
            number_bits[len-1-counter] = number%2;
            number/=2;
            counter++;
        }

        Ovde se trazi u array-u gde je prva jedinica
        int i;
        for (i=0; i < len;i++)
        {
            if (number_bits[i] == 1)
                break;
        }
        //Na kraju dobijamo broj koji je stepen od 2 
        return (unsigned int)pow(2, len-i);
    }
}
Ne znam jel svima jasna ovo moja "metoda", ako nije pojasnicu, ali bih voleo da vidim kako bi neko drugi to uradio, jer sam siguran da postoji optimiozvanija i kraca resenja, ali me moje neznanje sputava da ih upotrebim
Stevvan je offline   Odgovor sa citatom ove poruke