Ako vraća najbliži stepen dvojke (znači ako je number == 17, vraća 16) onda ide ovako:
Kod:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
unsigned int get_power_of_two(unsigned int number);
int main(int argc, char *argv[])
{
unsigned int broj;
scanf("%d", &broj);
printf("%d\n", get_power_of_two(broj));
system("PAUSE");
return 0;
}
unsigned int get_power_of_two(unsigned int number)
{
int i;
unsigned int temp1 = number, temp2;
for(i = 0; temp1 > 0; i++)
temp1 >>= 1; //delimo s 2 ;)
temp1 = pow(2, i-1); //manji stepen
temp2 = pow(2, i); //veci stepen
if((temp2 - number) < (number - temp1)) //ako je blize vecem stepenu dvojke
return temp2; //vrati veci stepen
else
return temp1; //vrati manji stepen
}
Ako vraća
prvi veći stepen dvojke (onako kako si ti opisao), onda ide ovako (test program je isti):
Kod:
unsigned int get_power_of_two(unsigned int number)
{
int i;
for(i = 0; number > 0; i++)
number >>= 1; //delimo s 2 ;)
return pow(2, i);
}
edit:
Je l' dovoljno kratak

?... i onda se ljudi čude kako su današnje igre tako loše optimizovane. Daleko ste vi od OpenGL-a, ima još mnogo matematike da ljuštite

. Ne da je matematika važna za programiranje nego programiranje jeste matematika jer su algoritmi i funkcije u stvari matematički koncepti... i sve vam to kaže čovek koji ima 6. iz matematike 2

.