Forum: Mikrocontroller und Digitale Elektronik char und bit addieren?


von crazy horse (Gast)


Lesenswert?

Moin,

spricht irgendwas dagegen, das zu tun? Funktioniert mit der momentanen
Compilerversion.

unsigned char send_byte=0x30;  //"0"
putchar (send_byte+D0_in);     //sendet Ascii 0 wenn I/Obit=0
                               //oder Ascii 1 wenn I/Obit=1

von Peter D. (peda)


Lesenswert?

Da es im ANSI-C keinen Bit-Typ gibt, gibt es auch keine Regel zur
Addition.

Besser ist daher:

putchar( D0_in ? '1' : '0' );


Peter

von Oryx (Gast)


Lesenswert?

Hi,
da ein Bit (auch wenn du in C++ ein bool nimmst) immer ein Byte lang
ist. Sehe ich kein Problem. Ein gewisses Problem tritt auf, wenn in
deinem "Bit" z.B. eine 10 drinsteht. Diese 10 wird auch als eins
gewertet. Aber deine Ausgabe macht halt irgendwas.

Peters Schreibweise ist mit Sicherheit portabler. Auch wenn die
Schreibweise mit dem ? für mich immer wieder blöde zu lesen ist.

Oryx

von crazy horse (Gast)


Lesenswert?

bei mir (CodeVision) gibts aber den Bit-Typ, und der belegt auch
wirklich nur ein Bit. Ich muss noch ein paar (16) Bytes
Programmspeicher schinden, die 3.Erweiterung von Kundenseite bringt
mich jetzt langsam in Nöte, also bin ich scharf auf jedes Byte.
Peters Lösungs braucht 6 word, (kannte ich noch gar nicht),
die "klassische" Variante
if (d1_in) putchar (0x31);
   else putchar (0x30);
ist mit 7 word dabei,
putchar (0x30+d1_in) braucht nur 5 word, also lasse ich dass jetzt
erstmal so. Falls ich genug Luft finde, kommts wieder raus.

Besten Dank.

von Marcus Maul (Gast)


Lesenswert?

Hallo Leute,

in C++ gibts tatsächlich eine Möglichkeit genau ein Bit zu benutzen für
eine bool Variable. Die meisten (zumindest gcc) C - Compiler
unterstützen diese Typen ebenfalls.

Versucht mal:

// bool b :1;

Gruß Marcus

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.