Programm rechnet nicht richtig?
-
Hallo zusammen,
muss ein Programm schreiben, welches an sich auch schon richtig funktioniert. nur eine klitze kleine sache noch nicht - es scheint nicht richtig zu rechnen.... habe eine Integer Variable:int a = 1;welche mit einer anderen Zahl "verundet" wird - bit-operator AND (&).
da kommt ein ergebins raus - im nächsten durchlauf wird es geshiftet:a = a << 1;...
in diesem Falle ist a ja nicht mehr 1, sondern zwei (00000001 << 1 = 00000010) ... da ich aber 3 brauche sage ich dann:a = a + 1;bei der ausgabe der verundung müsste er ja dann aber eigentlich mit 3 anfangen, er fängt aber bei 1 an ......
weiss jemand, was da falsch sein könnte?MfG
MWJK
-
1. Der Debugger ist dein Freund.
2. Zeig mal bisschen mehr Code.
-
Meine Variablen die auch alle verwendet werden:
byte a = 1; byte b = 63; byte c = 1; byte zahl = 0; int zu = 0; String Zahlen2 = ""; void Zahlen (void); int clicked = 0; int clicked2 = 0; String zahl1 = ""; void binzudez(); int as1, as2, as3, as4, as5, as6;Die Funktion die die ersten Werte liefert:
Form1->Label4->Caption = ""; for(zahl = 0; zahl < 64; zahl++){ zu++; if(zahl & a){ Form1->Label4->Caption = Form1->Label4->Caption + " " + zahl; } if(zu % 10 == 0){ Form1->Label4->Caption = Form1->Label4->Caption + "\n"; } }dann kann man wählen - ja oder nein (praktisch zahl dabei oder nicht) - bei nein wird diese funktion wieder verwendet nur mit:
a = a << 1;womit a von 1 auf 2 springt.
bei Ja muss a praktisch von 1 auf 3 springen, was ich folgendermaßen gelöst habe:
a = a << 1; a = a + 1;mehr text ists eigentlich nicht, hoffe dass das ein bisschen mehr aussagt als das eben.
MfG
MWJK
-
MWJK schrieb:
bei der ausgabe der verundung müsste er ja dann aber eigentlich mit 3 anfangen, er fängt aber bei 1 an
Welche Ausgabe?
Die Variable zahl wird durch die "Verundung" in der if-Abfrage jedenfalls nicht verändert, sie behält ihren Wert,
-
Ok jetzt hast du zwar mehr von deinem Quelltext preis gegeben aber eigentlich nur unwichtige Sachen.
Wenn überhaupt interessiert mich der Code der um die Operationen die du mit deiner Variablen a machst herum steht und nicht nur einzelne Fetzen daraus.Achja:
Benütz den Debugger(F7)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
Jansen schrieb:
MWJK schrieb:
bei der ausgabe der verundung müsste er ja dann aber eigentlich mit 3 anfangen, er fängt aber bei 1 an
Welche Ausgabe?
Die Variable zahl wird durch die "Verundung" in der if-Abfrage jedenfalls nicht verändert, sie behält ihren Wert,die ausgabe im label:
Form1->Label4->Caption = Form1->Label4->Caption + " " + zahl;MfG
MWJK
-
rean schrieb:
Ok jetzt hast du zwar mehr von deinem Quelltext preis gegeben aber eigentlich nur unwichtige Sachen.
Wenn überhaupt interessiert mich der Code der um die Operationen die du mit deiner Variablen a machst herum steht und nicht nur einzelne Fetzen daraus.Achja:
Benütz den Debugger(F7)!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Das is alles wichtig im Quelltext und alles von a is komplett mit bei, hier a nochmal einzeln:
byte a = 1; //global if(zahl & a){ //durchläufe Form1->Label4->Caption = Form1->Label4->Caption + " " + zahl; } a = a << 1; //für jeden weiteren durchlauf für ja und nein a = a + 1; //für jeden weiteren durchlauf nur für jaGruß
MWJK
-
irgendwie scheint da in der "verundung" was falsch zu sein ....
hab das ganze zwar jetzt so:if((zahl & a) == a){ //Ausgabe im Label4 }aber es scheint nich so ganz richtig zu sein ........
Gruß
-
Keine Ahnung, was du dir von dem & erhoffst.
Lies doch noch mal nach, was das bitwise AND eigentlich macht.
-
Jansen schrieb:
Keine Ahnung, was du dir von dem & erhoffst.
Lies doch noch mal nach, was das bitwise AND eigentlich macht.was das & macht weiß ich ... da is nicht das problem und das erfüllt in diesem zusammenhang auch seine funktion - es soll einfach das bit prüfen, ob die zahl darin liegt - oder nicht... und wenn bei der zahl das bit das geprüft wird gesetzt ist, dann soll er diese zahl im label4 ausgeben, deswegen "verunde" ich zahl mit a (a ist das bit das geprüft werden soll und zahl die zahl bei der geprüft werden soll - die sich durch die for-schleife ändert).
aber irgendwie is an der ausgabe was falsch ...
-
Ich glaube, du verstehst nicht ganz was das bitweise AND eigentlich macht, möglicherweise meinst du den %-Operator.
Wenn a 3 ist, dann fängt die Ausgabe der Zahlen bei 1 und nicht bei 3 an, das ist durchaus richtig so. Weil:
(1&3)==1
Und 1 wird as true ausgewertet.
-
Nanyuki schrieb:
Ich glaube, du verstehst nicht ganz was das bitweise AND eigentlich macht, möglicherweise meinst du den %-Operator.
Wenn a 3 ist, dann fängt die Ausgabe der Zahlen bei 1 und nicht bei 3 an, das ist durchaus richtig so. Weil:
(1&3)==1
Und 1 wird as true ausgewertet.sry, aber ich weiss, was das bitwise AND macht.
wenn ich zahl (in diesem falle zwischen 0 und 64 ist) mit a (in diesem falle 0 und wird dann geshiftet) "verunde" also mit bitwise AND vergleiche und wenn das 1 ist dann die Ausgabe mache, dann kann es ja nur so sein ...
wenn also zahl 5 is '00000101' und a ist 1 '00000001', dann wird es ausgegeben ... wenn zahl allerdings 6 wäre '00000110' und a 1 '00000001', dann wird die zahl nicht ausgegeben, da der vergleich mit bitwise AND 0 ergibt.Denke nach dieser Erklärung dürfte auch jedem klar sein, dass ich weiß wie bitwise AND funktioniert und mittlerweile habe ich auch das Programm zum laufen gebracht - es war ein Rechenfehler von mir, den ich mitprogrammiert habe. allerdings wie gesagt ein rechenfehler und kein Programmierfehler.
Gruß
MWJK