bitmuster verbreitern/schmälen (vorlauf/nachlauf)

Markus

Administrator
Teammitglied
Beiträge
5.253
Punkte Reaktionen
1.291
Zuviel Werbung?
->Hier kostenlos registrieren
hallo,

wenn ich zb folgendes bitmuster habe:

Code:
00000000011110000000001111110000

die bereiche in denen eine 1 steht will ich zb um 2 verbreitern,
also so:

Code:
00000001111111100000111111111100

dann kann ich das ja machen in dem ich das dw in einer
schleife immer um eine stelle nach links bzw. nach rechts schiebe, und akku1 mit akku2 verodere, aber wenn ich den bereich stark vergrößern will hab ich ne schleife die sehr viel zykluszeit frisst...

deshalb wollte ich mal die mathefreaks hier fragen ob das nicht einfacher oder eleganter geht. darf auch kompliziert aussehen, wie das programm für andere nachvollziehbar ist ist nicht so wichtig. aber einspaarungen in der zykluszeit schon...

(ich muss in der schleife mehrere dw verodern.
 

Zottel

Well-known member
Beiträge
2.299
Punkte Reaktionen
277
Rezept (kein Code):

1. Du schiebst das Wort (oder Doppelwort, hab nich gezählt) rechts oder links, Richtung egal, da du ja symmetrisch "verbreitern" willst.
2. Nach jedem Schiebeschritt kontrollierst du die oder-Verknüpfung des 1.,2. und 3. Bits., z.B. bei Rechtsschieben x.0,x.1,x.2
Ergibt das 1, kopierst Du eine 1 in die höchste Stelle eines Ergebnisdatenworts, sonst eine 0, d.h. Du kopierst das Ergenis des Oders dorthin.
Beispiel:
U M4.0
0 M4.1
0 M4.2
=M8.15
3. Du schiebst das Ergebnis-Wort (oder Doppelwort) rechts oder links, Richtung wie beim Ausgangswort.
4. Du wiederholst 1-3 sooft, wie die Worte Bits haben.
 
OP
Markus

Markus

Administrator
Teammitglied
Beiträge
5.253
Punkte Reaktionen
1.291
Zuviel Werbung?
->Hier kostenlos registrieren
danke,

aber:

1. ich habs nicht wirklich kappiert (was ist m8.15)
2. die lösung die ich gepostet habe scheint da doch eifacher zu sein.

im prinzip will ich von der schleife wegkommen...
 

Zottel

Well-known member
Beiträge
2.299
Punkte Reaktionen
277
M8.15 sollte M9.7 heissen, ist einfach der höchste Merker
bei 16-bit, Wenn das Ergebnis z.B.im MW8 stünde.

Ok, geht auch einfacher, sorry:

Originalwort mit links geschobener und rechts geschobener Kopie verodern, verbreitert die Einsen rechts und links um 1. Für Breite 2 2 mal machen.

Wenn Du sicher sein kannst, dass das Muster immer mindestens
2 Einsen nebeneinader aufweist, müsste man auch gleich um 2 schieben können:
000011000
001100000
000000110
--------- oder
001111110

Wo steht deine Lösung?
 
OP
Markus

Markus

Administrator
Teammitglied
Beiträge
5.253
Punkte Reaktionen
1.291
die lösung steht doch in meinem ersten post.
dann kann ich das ja machen in dem ich das dw in einer
schleife immer um eine stelle nach links bzw. nach rechts schiebe, und akku1 mit akku2 verodere, aber wenn ich den bereich stark vergrößern will hab ich ne schleife die sehr viel zykluszeit frisst...

ne ich darf immer nur um eine stelle schieben, ist verschieden.

hab aber deine lösung nochmal angeschaut, habs jetzt verstanden.

es handelt sich dabei um dws d.h. bei deiner lösung würde die schleife jedesmal 32 umläufe haben.

bei mir nur soviele wie ich das muster verbreitern will.

prinzipiell würden beide lösungen funktionieren, und deine gefällt mir auch ganz gut weil die zykluszeit (schleifendurchläufe) stabil wäre.

bei mir wäre sie von der verbreiterung abhängig...
und sobald ich um mehr wie 32 verbreitere hätte ich mehr durchläufe...

(das bitmuster ist 7 dw breit)


aber eigentlich wollte ich weg von den schleifen, und dachte das es irgeneine rafinierte formel oder sowas gibt...

trotzdem danke, hat mich auf einen etwas anderen weg gebracht...[/code]
 
Oben