Du willst nicht die Bits vertauschen, denn das würdest due mit XOR machen. Nein, was du willst ist High- und Lowbyte vertauschen das geht am einfachsten so.
wInt:=ROL(wInt,8);
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
originalTmp := original; (* um das Original nicht zu verändern *)FOR forCount := 0 TO 15 DO mirrorTmp.0 := originalTmp.0; mirror := mirrorTmp; (* es folgt ja noch links ein schieben also kopiere das korrekte Ergebnis sichern *) mirrorTmp := SHL(mirrorTmp , 1); originalTmp := SHR(originalTmp, 1);END_FOR;
Alternativ kann man auch eine IF verwenden:
originalTmp := original; (* um das Original nicht zu verändern *)FOR forCount := 0 TO 15 DO mirror.0 := originalTmp.0; IF forCount <= 14 THEN mirror := SHL(mirror , 1); originalTmp := SHR(originalTmp, 1); END_IF;END_FOR;
PS: Nenne mich jetzt nicht Kai ich habe keine 3PDFs angehängt ;o)
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Warum so komliziert? Wenn es nur darum geht die Bits zu spiegeln, kannst Du doch eine Funktion schreiben. Und zwar so:
mirror.0 := original.15;
mirror.1 := original.14;
mirror.2 := original.13;
usw.......
mirror.15 := original.0;
Der Code sieht somit viel verständlicher aus. Vielleicht nicht am professionellsten, aber funktioniert! Und ist garantiert schneller als mit all den Bit-Schiebefunktionen!😉
Mit freundlichen Grüssen! Pitsch
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Pitsch52 hat geschrieben:
Hallo foenig
Warum so komliziert?
...
Ist doch Geschmackssache. Ich habe schließlich nur eine Lösung gezeigt. Und selbst Dir war es zuviel mittels Copy Paste hier alle 16 Bits zu Swapen ;o)
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo,
ich programmiere in Codesys, und jetzt ist es notwendig, bei einer 16bit INT Zahl die bits zu vertauschen.
Also aus
0000000011000111 soll
1110001100000000 werden.
Haben schon diverse Codeexamples aus C usw.. versucht auf Pascal umzuschreiben - ohne erfolg.
Ich hoffe jemand hat eine lösung dafür parat, damit wäre mir sehr geholfen!
Vielen Dank schon einmal im Voraus,
mfg Florian
Du willst nicht die Bits vertauschen, denn das würdest due mit XOR machen. Nein, was du willst ist High- und Lowbyte vertauschen das geht am einfachsten so.
@Benjanin
Nö, ich denke er will die Bits spiegeln.
Ich würde sagen, ST starten.
Schleife mit 16 Durchgängen starten.
und die Bits swappen.
Achtung Pseudocode ! ! !
NICHT Lauffähig, nur grobalgo, der mir auf die schnelle einfällt.
(C-Abwandlung )
Mal auf die schnelle:
Hi Zotos
Schaut FAST gut aus
Frage:
Kapier ich nicht.
Lustig das Du mich zotos nennst.
Ich behaupte nicht das der Code elegant ist ;o)
Alternativ kann man auch eine IF verwenden:
PS: Nenne mich jetzt nicht Kai ich habe keine 3PDFs angehängt ;o)
Hallo foenig
Warum so komliziert? Wenn es nur darum geht die Bits zu spiegeln, kannst Du doch eine Funktion schreiben. Und zwar so:
mirror.0 := original.15;
mirror.1 := original.14;
mirror.2 := original.13;
usw.......
mirror.15 := original.0;
Der Code sieht somit viel verständlicher aus. Vielleicht nicht am professionellsten, aber funktioniert! Und ist garantiert schneller als mit all den Bit-Schiebefunktionen!😉
Mit freundlichen Grüssen! Pitsch
Ist doch Geschmackssache. Ich habe schließlich nur eine Lösung gezeigt. Und selbst Dir war es zuviel mittels Copy Paste hier alle 16 Bits zu Swapen ;o)
Ihr drei habt natürlich recht, ich hatte nur die einfachste Problemstellung vor Augen.