LabVIEWForum.de
Formelknoten: Bitweise Verschiebung funktioniert anders als in C? - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Formelknoten: Bitweise Verschiebung funktioniert anders als in C? (/Thread-Formelknoten-Bitweise-Verschiebung-funktioniert-anders-als-in-C)



Formelknoten: Bitweise Verschiebung funktioniert anders als in C? - buechling - 11.04.2015 09:42

Hallo,

ich habe entdeckt, dass man C++ Code recyclen kann, indem man ihn einfach in einen LabView-Formelknoten einfügen kann. Das funktioniert soweit ganz gut. Was aber nicht klappt ist der Verschiebeoperator ( http://de.wikipedia.org/wiki/Bitweiser_Operator )

[attachment=52788]

In C tut dies folgendes: halbiere die Zahl nSubsidy, immer wenn nHeight ein Vielfaches von 525600 ist. Die Ausgabe sollte 40 sein.
In LabView wird aber schon halbiert ab 525600/2= 262800, also ist die Ausgabe hier 20.
irgendwie wird also aus der Zahl "0,5" rechts des Operators eine "1"

wie macht man es richtig mit möglichst wenig Code-Veränderung? Typkonvertierung im Formelknoten? Runden im Formelknoten?

umständliche Lösung wäre das hier:
Code:
int32 i;
for(i = 525600; i <= nHeight; i += 525600) nSubsidy -= nSubsidy/2;



RE: Formelknoten: Bitweise Verschiebung funktioniert anders als in C? - jg - 11.04.2015 20:55

mod(x,y) ?!

Gruß, Jens


RE: Formelknoten: Bitweise Verschiebung funktioniert anders als in C? - Y-P - 14.04.2015 07:03

Mal eine blöde Frage:
Wieso programmierst Du nicht gleich in C? Big Grin

Gruß Markus


RE: Formelknoten: Bitweise Verschiebung funktioniert anders als in C? - GerdW - 14.04.2015 07:58

Hallo buechling,

Zitat:irgendwie wird also aus der Zahl "0,5" rechts des Operators eine "1"
Ich kenn mich mit C(++) nicht so genau aus, aber du führst doch da eine Division mit INTs ("nHeight / 525600") durch!?
Wenn ich mich recht erinnere, führt C(++) kein automatisches Coercing/Typecasting wie LabVIEW aus…


RE: Formelknoten: Bitweise Verschiebung funktioniert anders als in C? - buechling - 16.04.2015 22:31

Danke für die Tipps.
Ja das wird es wohl sein, C schneidet ab und LabView rundet...

mod(x,y) liefert leider den Rest und nicht den Quotient!
es es gibt wohl ceil(x) und floor(x)...

Code:
int32 nSubsidy = 40;

nSubsidy >>= floor(nHeight/525600);
das ist dann also die Lösung:
abrunden = floor(nHeight/525600) = C-Style
echtes runden = (nHeight/525600)
aufrunden = ceil(nHeight/525600)

ich progammiere ein LabView weil es grafisch einfach mehr Spass machen Smile
aber trotzdem habe ich manchmal alten code aus C-Anwendungen den in gern ohne viel Veränderung übernehmen würde..
und die Werbung versprach "Berechnet mathematische Formeln und Ausdrücke in einer C-ähnlichen Syntax im Blockdiagramm" 2hands


RE: Formelknoten: Bitweise Verschiebung funktioniert anders als in C? - rolfk - 20.04.2015 10:20

(16.04.2015 22:31 )buechling schrieb:  und die Werbung versprach "Berechnet mathematische Formeln und Ausdrücke in einer C-ähnlichen Syntax im Blockdiagramm" 2hands

Naja, sie sagen nicht dass es C ist, sondern nur ähnlich! Cool Und damit lügen sie ja echt nicht! Einen kompletten C Compiler mit allen Spezialitäten und C-Kuriosa in LabVIEW einzubauen ware ja auch ein wenig idiotisch.