Hallo,
ich moechte in C eine simple funktion generieren mit Bitshiftoperationen, die die höchste Zweierpotenz zurueck gibt, durch die eine Zahl teilbar ist.
Problem ist, ja das Programm gibt mir die höchste Zweierpotenz korrekt aus.
Bei einer Zehn bekomme ich den Wert 2^3 zurueck (=8), aber korrekt teilbar ist das nicht. Ich möchte das lediglich Zahlen wie 2, 4, 8, 16, 32, 64 usw. mir zurueckgegeben werden und nicht bei Modulo die höchste ausgegeben wird.
Sprich eigentlich muesst ich ja bei dem UND-weisen bitshiften die Stellen 3,6,9,12,15,18,21... checken ob NUR dort eine 1 gesetzt ist.
Hope wer kann mir helfen,
vielen Dank!
Greetings.
Ergänzung: OHNE MODULO-OPERATOR UND POTENZFUNKTION! REINE BITOPERATIONEN :)
ich moechte in C eine simple funktion generieren mit Bitshiftoperationen, die die höchste Zweierpotenz zurueck gibt, durch die eine Zahl teilbar ist.
Code:
int bitcheck(unsigned int z)
{
int i, h = 0;
int x;
for(i = 1; i<32; i++)
{
if(z&(1<<0))
{
return 0;
break;
}
if(z&(1<<i))
{
h = i;
}
}
return h;
}
void main()
{
int check;
unsigned int zahl;
printf("Zahl: ");
scanf("%d", &zahl);
check = bitcheck(zahl);
if(check == 0)
printf("Ihre Zahl ist ungerade und somit nicht durch eine Zweierpotenz teilbar!\n");
else
{
printf("Ihre Zahl ist durch die Zweierpotenz '2^%d' teilbar!\n", check);
}
system("pause");
}
Problem ist, ja das Programm gibt mir die höchste Zweierpotenz korrekt aus.
Bei einer Zehn bekomme ich den Wert 2^3 zurueck (=8), aber korrekt teilbar ist das nicht. Ich möchte das lediglich Zahlen wie 2, 4, 8, 16, 32, 64 usw. mir zurueckgegeben werden und nicht bei Modulo die höchste ausgegeben wird.
Sprich eigentlich muesst ich ja bei dem UND-weisen bitshiften die Stellen 3,6,9,12,15,18,21... checken ob NUR dort eine 1 gesetzt ist.
Hope wer kann mir helfen,
vielen Dank!
Greetings.
Ergänzung: OHNE MODULO-OPERATOR UND POTENZFUNKTION! REINE BITOPERATIONEN :)