binär rechnen
-
Hallo zusammen,
kann C irgendwie mit Binärezahlen rechnen?
Das Problem ist nähmlich, dass ich von einem AD-Wandler 12-Bit, bitweise einlese, aber der Wert kann auch negativ sein, ist also im Einerkomplement, ich weiß wie mans per Hand umrechnet, nur über Schleifen und ifs ist das doch etwas umständlich. Weiß jemand eine einfachere Möglichkeit?Danke schonmal
Greetz
Merc
-
Beschreib dein Problem doch bitte nochmals etwas präziser. Mir ist die Problematik irgendwie nicht klar.
-
C hat mehrere Operatoren um auf Bit-Ebene mit Variablen zu arbeiten. Siehe z.B. Operatoren auf Bit-Ebene auf http://www.peace-software.de/ckurs4.html
-
Was genau willst du denn umrechnen? C kann auch Einerkomplement, wenn der unterliegende Prozessor so arbeitet. Oder willst du Einerkomplementdaten, die vom ADC kommen, ins Zweierkomplement überführen?
-(~x)
sollte es tun.
-
ich will die einfach in ne integerzahl umwandeln. und meinte natürlich das zweierkomplement nicht einer, sorry.
im moment lese ich einfach die bits in einen integer-array ein, der dann halt nur nullen und einsen hat, und rechne die dann um, das problem ist wenn der wert negativ ist, also das erste bit 1, muss ich es ja invertieren und dann noch eins dazu zählen, das mach ich halt nur mit lauter if schleifen, und is doch etwas umständlich, dachte vielleicht geht das etwas einfacher
-
mercutio schrieb:
ich will die einfach in ne integerzahl umwandeln. und meinte natürlich das zweierkomplement nicht einer, sorry.
im moment lese ich einfach die bits in einen integer-array ein, der dann halt nur nullen und einsen hat, und rechne die dann um, das problem ist wenn der wert negativ ist, also das erste bit 1, muss ich es ja invertieren und dann noch eins dazu zählen, das mach ich halt nur mit lauter if schleifen, und is doch etwas umständlich, dachte vielleicht geht das etwas einfacher
1. Warum bekommst du nur einzelne Bits? Was ist denn das für ein A/D-Wandler?
2. Warum dürfen die Werte nicht negativ sein?
3. if schleifen gibt es nicht.
-
zu 1 & 2.
die einzelnen Bits bekomme ich weil ich ein paralleles 12 bit Datensignal habe, die Digitale I/O-Karte aber nur 1,8 oder 16 bit einlesen kann. und wenn ich 16 einlese bekomme ich zwar nen wert aber der stimmt ja nicht, weil das 12 Bit ja das vorzeichen ist. der wandler sollte werte von -2047 bis 2048 liefernzu 3.
meinte ifs und for schleifen
-
Lies doch einfach 16 Bit ein und packe das dann in ein 12 Bit Bitfeld.
struct int12_t { int value : 12; }; struct uint12_t { unsigned value : 12; };
-
Oder entsprechend in einen 16 Bit Typen packen
int16_t ad_data = (int16_t) (ad_data_reg << 4);