BYTE Alogrithmus
-
Alles klar! Da hab ich wohl mal wieder was übersehen 
-
CStoll schrieb:
Schau dir mal Martins Schleife an, so funktioniert es korrekt.
Welche denn genau?
-
int i = 8; while(i--) { if(Wert & (1<<i)) { TuWas(i); break; } }Diese hier

Edit: Der Unterschied zu estartus Bsp. liegt nur in der if-bedingung. Sie hätte dort (Wert & 2^i) stehen. Was aber das selbe ergibt
-
connan schrieb:
Edit: Der Unterschied zu estartus Bsp. liegt nur in der if-bedingung. Sie hätte dort (Wert & 2^i) stehen. Was aber das selbe ergibt

Abgesehen davon, daß ^ nicht potenziert, stimmt das
(und wie ich estartu einschätze, hätte sie wohl auch mit shift-Operatoren gearbeitet)
-

-
CStoll schrieb:
(und wie ich estartu einschätze, hätte sie wohl auch mit shift-Operatoren gearbeitet)
Danke.
Das wollte ich ja auch. 
estartu schrieb:
Man könnte mit << noch eine Schleife draus machen[...]
-
Und wie funzt es mit << bzw >>, ich kriege es immer noch nicht hin
-
connan schrieb:
int i = 8; while(i--) { if(Wert & (1<<i)) { TuWas(i); break; } }Diese hier

Edit: Der Unterschied zu estartus Bsp. liegt nur in der if-bedingung. Sie hätte dort (Wert & 2^i) stehen. Was aber das selbe ergibt
So wie's hier schon dargestellt ist. Was funktioniert denn nicht?
Edit: Das break musst du wahrscheinlich noch rausmachen, es sei denn es kann immer nur ein bit aktiv sein.
-
Also,
Wenn ich als Wert 0x1000 (int
habe, dann ruft er mir die TuWas funktion bei
folgenden Werten für i auf:
7
6
5
3Rein theoretisch müsste er mir doch nur einmal in diese Funktion kommen, nämlich bei Bit 4 (8), oder??????

-
Ich glaub, ich hab es....
DezZahl = einzulesende Dezimalzahl
i = Schleifenzaehlerfor ( i = 7 ; i >= 0 ; i--)
{
/*ist der Bitwert an der Stelle i eine 1,
so wird 1 ausgeben, ansonsten eine 0*/
if ( DezZahl&(1<<i))
printf ("1");
else
printf ("0");
}