Hallo, ich bin auf der Suche nach einem Algorithmus ( soll in C programmiert werden), welcher in einer Schleife alle möglichen Kombinationen einer 16-Bit-Zahl ausgibt, also 0 bis 65535. Dabei sollten sich aber in jedem Schritt das MSByte und das LSByte. Also nicht einfach: for( i = 0; i < 65535; i++) Am besten wäre, wenn sich keine Zahl widerholt. Ich habe schon einen einen Zufallsgenerator gedacht und jede schon aufgezählten Wert speicher und vergleich. Aber etwas aufwendig ... Oder im das MSByte toggeln und das LSByte hochzählen, und dann die "polarität" des MSByte umkehren und alles von vorne: MSByte LSBbyte 0 1 1 2 0 3 1 4 0 5 1 6 ... ... 0 255 wenn beim LSB durch : MSByte LSBbyte 1 1 0 2 1 3 0 4 1 5 0 6 ... ... 1 255 und dann: MSByte LSBbyte 2 1 3 2 2 3 3 4 2 5 3 6 ... ... 2 255 usw. Hätte sonst noch jemand eine gute Idee? Grüße Kim
Re: Alle Möglichkeiten einer 16-Bit-Zahl, aber MSByte und LSByte sollen sich bei jedem Schritt änder
Kim schrieb: > Dabei sollten sich aber in jedem Schritt das MSByte und das LSByte. ... ändern.
Re: Alle Möglichkeiten einer 16-Bit-Zahl, aber MSByte und LSByte sollen sich bei jedem Schritt änder
Kim schrieb: > widerholt. wiederholt.
Re: Alle Möglichkeiten einer 16-Bit-Zahl, aber MSByte und LSByte sollen sich bei jedem Schritt änder
Na du musst doch jeweils nur 257 (256+1) addieren. Plus 256 erhöht das obere Byte um eins, plus 1 gleichzeitig das untere. Ohne Gewähr und ohne groß nachzudenken.
Re: Alle Möglichkeiten einer 16-Bit-Zahl, aber MSByte und LSByte sollen sich bei jedem Schritt änder
Aber dann habe ich doch am Ende nicht alle 65535 Möglichkeiten, sondern so nur 255 (oder so) verschiedene Zahlen erzeugt!?
Re: Alle Möglichkeiten einer 16-Bit-Zahl, aber MSByte und LSByte sollen sich bei jedem Schritt änder
Ich denke, daß derartiges über GREY-Code gehen könnte: temp := 16Bit Greycode-Counter Zahl := temp XOR 16-Bit expandierte Parity(temp) Zur Verdeutlichung 4-bittig: temp PTY Zahl 0000 0000 0000 0001 1111 1110 0011 0000 0011 0010 1111 1101 0110 0000 0110 0111 1111 1000 0101 0000 0101 0100 1111 1011 1100 0000 1100 1101 1111 0010 1111 0000 1111 1110 1111 0001 1010 0000 1010 1011 1111 0100 1001 0000 1001 1000 1111 0111 Das scheint zu tun! Bernhard
Re: Alle Möglichkeiten einer 16-Bit-Zahl, aber MSByte und LSByte sollen sich bei jedem Schritt änder
Kim schrieb: > Aber dann habe ich doch am Ende nicht alle 65535 Möglichkeiten, sondern > so nur 255 (oder so) verschiedene Zahlen erzeugt!? 0000 0101 0202 ... FFFF 0100 0201 0302 ... 00FF 0200 0301 ... Modulo-Rechnung eben. Informatik muss nicht völlig sinnlos sein. ;-)
Re: Alle Möglichkeiten einer 16-Bit-Zahl, aber MSByte und LSByte sollen sich bei jedem Schritt änder
Bernhard R. schrieb: > expandierte Parity OK. Die "expandierte Parity" ist für 16 Bit: ungerade: 0000 0000 0000 0000 gerade: 1111 1111 1111 1111 ? Wie mach ich das mit dem Greycode-Counter? Da ändert sich ja immer ein Bit im Vergleich zur vorigen Zahl?!
Re: Alle Möglichkeiten einer 16-Bit-Zahl, aber MSByte und LSByte sollen sich bei jedem Schritt änder
A. K. schrieb: > 0000 0101 0202 ... FFFF 0100 0201 0302 ... 00FF 0200 0301 ... > Modulo-Rechnung eben. Informatik muss nicht völlig sinnlos sein. ;-) Ehrlich gesagt, blick ich das noch nicht.
Re: Alle Möglichkeiten einer 16-Bit-Zahl, aber MSByte und LSByte sollen sich bei jedem Schritt änder
Kim schrieb: > Ehrlich gesagt, blick ich das noch nicht. Dann zähl eben alle 65536 Kombinationen durch. Oder lass deinen PC das tun.
Re: Alle Möglichkeiten einer 16-Bit-Zahl, aber MSByte und LSByte sollen sich bei jedem Schritt änder
Nee ... wie ich das programmtechnisch umsetzte, meinte ich.
Re: Alle Möglichkeiten einer 16-Bit-Zahl, aber MSByte und LSByte sollen sich bei jedem Schritt änder
Kim schrieb: > Wie mach ich das mit dem Greycode-Counter? Da ändert sich ja immer ein > Bit im Vergleich zur vorigen Zahl?! Kann ich nicht einfach 0000 ... 1111 durchzählen und drauf Zahl := temp XOR 16-Bit expandierte Parity(temp) anwenden. Sollte doch auch gehen?!
Re: Alle Möglichkeiten einer 16-Bit-Zahl, aber MSByte und LSByte sollen sich bei jedem Schritt änder
Kim schrieb: > Nee ... wie ich das programmtechnisch umsetzte, meinte ich. Stefans Vorschlag:
1 | uint16_t i = 0; |
2 | while (1) { |
3 | i += 0x0101; |
4 | }
|
Re: Alle Möglichkeiten einer 16-Bit-Zahl, aber MSByte und LSByte sollen sich bei jedem Schritt änder
Kim schrieb: > Kann ich nicht einfach 0000 ... 1111 durchzählen und drauf > > Zahl := temp XOR 16-Bit expandierte Parity(temp) > > anwenden. > > Sollte doch auch gehen?! Natürlich nicht, dann ändert sich ja MSByte und LBByte nicht bei jedem Schritt ... mpf
Re: Alle Möglichkeiten einer 16-Bit-Zahl, aber MSByte und LSByte sollen sich bei jedem Schritt änder
>Aber dann habe ich doch am Ende nicht alle 65535 Möglichkeiten, sondern >so nur 255 (oder so) verschiedene Zahlen erzeugt!? Ja, aber ich hatte dich so verstanden, dass Du gewöhnliche Dualzahlen verwenden willst und aufsteigend zählen willst. Da gibt es wohl nur 256 Möglichkeiten. Sonst musst Du einen anderen Code verwenden, wie Bernhard schrieb. Aber mit der Kodierung kann man dann natürlich nicht direkt Rechenoperationen durchführen. http://de.wikipedia.org/wiki/Kategorie:Bin%C3%A4rcode
Re: Alle Möglichkeiten einer 16-Bit-Zahl, aber MSByte und LSByte sollen sich bei jedem Schritt änder
Salewski, Stefan schrieb: > Ja, aber ich hatte dich so verstanden, dass Du gewöhnliche Dualzahlen > verwenden willst und aufsteigend zählen willst. Da gibt es wohl nur 256 > Möglichkeiten. Ich hatte es anders verstanden: Er will alle 2^16 Kombinationen durchlaufen lassen bevor es sich wiederholt, egal in welcher Reihenfolge, nur sollen sich in jedem Schritt MSB und LSB ändern. Und genau das leistet dein Vorschlag.
Re: Alle Möglichkeiten einer 16-Bit-Zahl, aber MSByte und LSByte sollen sich bei jedem Schritt änder
Lass einen Zähler von 0 bis 65535 zählen und berechne daraus jeweils CRC16. Lass einen Zähler von 0 bis 65535 zählen und invertiere jedes zweite Mal mit einer 16-Bit-Konstante (z.B. ffff). Oder nimm einen 16-Bit RNG (random number generator).
Re: Alle Möglichkeiten einer 16-Bit-Zahl, aber MSByte und LSByte sollen sich bei jedem Schritt änder
A. K. schrieb: > Ich hatte es anders verstanden: Er will alle 2^16 Kombinationen > durchlaufen lassen bevor es sich wiederholt, egal in welcher > Reihenfolge, nur sollen sich in jedem Schritt MSB und LSB ändern. Und > genau das leistet dein Vorschlag. So ist der Plan. ;-) Auf jeden Fall Danke für die Vorschläge. Ich werde jetzt versuchen das Ganze in C umzusetzen.
Re: Alle Möglichkeiten einer 16-Bit-Zahl, aber MSByte und LSByte sollen sich bei jedem Schritt änder
>genau das leistet dein Vorschlag.
Ja, durch den Überlauf. Oder wenn er doch (nur) aufsteigend zählen will,
könnte er natürlich statt mit 0 mit einem Wert von 1 bis 256 starten,
und dann jeweils 257 addieren.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.