LabVIEWForum.de - 2er Komplement

LabVIEWForum.de

Normale Version: 2er Komplement
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo liebe LabVIEW-Experten,

ich würde gerne wissen, wie ein LabVIEW-Programm aussehen kann, das 12bit-Daten als 2er Komplement ausgibt. Das höchste bit bei den negativen Werten ist dabei mit einer 1 gekennzeichnet. Ich habe gelesen, dass ich zuerst 1 von den 12bit subtrahieren muss und danach das ganze invertieren.

Im Forum habe ich dazu noch nichts gefunden. Kann mir jemand weiterhelfen?

Vielen Dank.
Das Zweierkomplement wird zur Darstellung von negativen Zahlen im binärsystem benutzt.
Zuerst ignoriert man das Vorzeichen (ABS), dann wandelt man die Zahl von Dezimal in Dual um. Jetzt die Binärzahl invertieren und anschliessend eine Eins addieren. Schon hast du das Zweierkomplement einer negativen Dezimalzahl.

Alle Funktionen wie Betrag, Umwandeln, Not, Add sind leicht in der Palette zu finden. einfach nur die genannte Reihenfolge beachten und entsprechend "verdrahten".

Viel Erfolg!
Smile
Hier ein einfaches Bsp. für 8 Bit (in beide Richtungen):
[attachment=25620]
Lv86_img

[attachment=25621]

Gruß Markus
oO - ich wusste gar nicht, dass LV schon automatisch bei Umwandlung das 2erkomplement ausgibt....

Man lernt eben nie aus! Smile
Das macht es aber nur bei Datentypen mit "I", also z.B. I8, I16,..., damit hier keine Unklarheiten entstehen.

Gruß Markus
Mal 'ne ganz ganz blöde Frage, weil ich mich nie mit so einem Thema beschäftigt habe: Wie unterscheidet man denn im Beispiel von Markus -127 und +129 auf der binären Ebene? Ist doch beides 10000001, oder?
' schrieb:Wie unterscheidet man denn im Beispiel von Markus -127 und +129 auf der binären Ebene? Ist doch beides 10000001, oder?
Durch Konvention und Definition!
Definition: Unterscheidung dadurch, ob es ein vorzeichenbehafteter oder vorzeichenloser Integer ist (int8, uint8)
Konvention: ob es im Einer- oder Zweierkomplement gespeichert/verarbeitet wird
' schrieb:Mal 'ne ganz ganz blöde Frage, weil ich mich nie mit so einem Thema beschäftigt habe: Wie unterscheidet man denn im Beispiel von Markus -127 und +129 auf der binären Ebene? Ist doch beides 10000001, oder?
Es gibt neben den eigentlichen Daten immer noch etwas zweites, was von LabVIEW mit gespeichert wird: den sog. "Typ-String". In Deinem Beispiel sind die beiden Daten gleich, die Typ-Strings aber unterschiedlich. Experimentiere mal selbst hiermit: (die 2. Konstante ist I8, wurde falsch benannt)
[attachment=25629]
Was ich noch sagen wollte: Warum sagt hier niemand klar, wie einfach die 2er-Kompliment-Konvertierung ist?
So: (wobei man die Konverter sogar weglassen kann, wenn man einfach das Anzeigeformat anpasst und einen Konverierungspunkt in Kauf nimmt)
[attachment=25631]
Wenn es sich nicht im ein IEEE-Format handelt (mit 8, 16, 32, 64 bit), dann wird die Konvertierung ein klein wenig aufwändiger. Also z.B. ein 18bit-Wert eines AD-Umsetzers müßte zuerst in seinem 32bit Container 14bit nach links gerückt werden, Konvertiert und dann wieder nach rechts geschoben werden.
Um diese Prozedur zu ersparen, habe ich es auch schon erlebt, daß die Daten eines 12bit-Umsetzers linksbündig im 16bit Format ausgegeben werden. Eine kluge Entscheidung des Herstellers, wie ich finde.
:google:ist dein Freund, da es doch etwas komplizierter istWink

Forum NI
' schrieb::google:ist dein Freund, da es doch etwas komplizierter istWink

Forum NI
Es genügt aber nicht zu goggeln, die Kunst dabei ist, die oft überwiegendende Anzahl von Schrott-Ergebnissen zu erkennen.
Habe leider übersehen, daß sich die Frage direkt auf 12 bit bezieht, also nochmal die Antwort speziell hierfür.
Der Wertebereich bei 12 bit ist 0..4095.
Sollen in diesem Bereich auch negative Zahlen abgebildet werde, so gibt es dafür 2 Darstellungsformen:
a) mit Offset
b) als 2er-Komplement.
Hier ein VI für beide Verfahren zur Konvertierung:
[attachment=25643]
Mein vorhergehender Text enthält in der Tat einen fehlerhafte Aussage. Um das das MSB der 12 bit-Zahl in das MSB des 16bit Containers zu bringen, kann man die Bits entweder um 4 Positionen nach links verschieben oder aber mit 16 multiplizieren. So weit so gut. Man darf aber danach die Bits nicht wieder nach rechts shiften, sondern muß das mit Ganzzahl-Division durch 16 machen. Also wie im Beispiel oben. Es bleibt aber alles nach wie vor ganz einfach, im Gegensatz also zu dem zitierten Google-Beispiel.
Seiten: 1 2
Referenz-URLs