08.04.2010, 15:50
Beitrag #1
|
Caru
LVF-Neueinsteiger
Beiträge: 5
Registriert seit: Dec 2009
8.6
2009
de
18147
Deutschland
|
2er Komplement
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.
|
|
|
08.04.2010, 16:01
Beitrag #2
|
BsaiboT
LVF-Stammgast
Beiträge: 449
Registriert seit: Nov 2009
2010
2007
kA
22459
Deutschland
|
2er Komplement
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!
Tobias Brüggemann
Dipl.-Ing.(FH) Nachrichtentechnik/Elektronik
|
|
|
08.04.2010, 16:45
Beitrag #3
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
|
2er Komplement
Hier ein einfaches Bsp. für 8 Bit (in beide Richtungen):
Zweierkomplement.vi (Größe: 5,93 KB / Downloads: 1289)
Gruß Markus
--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
|
|
|
08.04.2010, 21:15
Beitrag #4
|
|
|
09.04.2010, 06:23
Beitrag #5
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
|
2er Komplement
Das macht es aber nur bei Datentypen mit "I", also z.B. I8, I16,..., damit hier keine Unklarheiten entstehen.
Gruß Markus
--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
|
|
|
09.04.2010, 07:09
Beitrag #6
|
|
|
09.04.2010, 07:35
Beitrag #7
|
oenk
LVF-Stammgast
Beiträge: 361
Registriert seit: May 2005
>= 7.1
2004
EN
3018
Schweiz
|
2er Komplement
' 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
In theory, there is no difference between theory and practice; In practice, there is.
Chuck Reid
|
|
|
09.04.2010, 09:25
(Dieser Beitrag wurde zuletzt bearbeitet: 09.04.2010 09:33 von Lucki.)
Beitrag #8
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
2er Komplement
' 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)
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)
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.
|
|
|
09.04.2010, 10:16
Beitrag #9
|
|
|
09.04.2010, 13:06
(Dieser Beitrag wurde zuletzt bearbeitet: 09.04.2010 13:38 von Lucki.)
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
2er Komplement
' schrieb::google:ist dein Freund, da es doch etwas komplizierter ist
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:
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.
|
|
|
| |