Forum: Compiler & IDEs Dezimalzahl zerlegen zwei BIN Zahlen zu einer Dezimalzahl


von Balou B. (baloubaer)


Lesenswert?

Hallo alle zusammen,

ich möchte gern eine Dezimalzahl (z.B. 12 ) in zwei 4 Bit Zahlen 
umrechnen. aber jetzt nicht das es so aussieht 00001100 = 12. Sondern:

zehner Stellen | einer Stellen
Dez          1 | 2
Bin       0001 | 0010

Zahl 65
Dez          6 | 5
Bin       0110 | 0101

und das ganze wieder zurück. Sprich, es werden 8 Bit ausgelesen und die 
ersten 4 Bits sind 10er und die letzten 4 Bits sind 1er stellen.

Wie könnte man das Softwaretechnisch realisieren?

Ich bedanke mich für eure Mühen und verbleibe

mit freundlichen Grüßen

Balou Baer

von Horst H. (horha)


Lesenswert?


von Sina A. (sinapse)


Lesenswert?

int einer, zehner, bin;

einer=zahl%10;
zehner=(zahl-einer)/10;
bin=(zehner<<4)+einer;

lg

von Balou B. (baloubaer)


Lesenswert?

IHR SEIT ECHT SPITZE!!!!!

sofern es Funktioniert ;P

DANKE!

: Bearbeitet durch User
von Balou B. (baloubaer)


Lesenswert?

Noch eine Frage,

wie kann ich die Zahlen Maskieren?

Sprich, wenn die zehner nur zwischen 0 und 2 liegen kann und die einer 
zwischen 0 und 9?



einer=zahl%10;
zehner=(zahl-einer)/10;

einer &= 9;
zehner &= 2;

bin=(zehner<<4)+einer;

geht das so????


Danke für euere Hilfe

Mit freundlichen Grüßen

Balou Baer

von Joachim B. (jar)


Lesenswert?

müsste dir das helfen

#define UBYTE (unsigned char)

oder neudeutsch

#define UBYTE uint8_t ???
1
UBYTE bcdtoint( UBYTE bcd )
2
{  return ((UBYTE)(((bcd>>4)*10)+(bcd&15)));
3
}
4
5
UBYTE int2bcd( UBYTE integer )
6
{  return ((UBYTE)(((integer/10)<<4)+(integer%10)));
7
}

von Balou B. (baloubaer)


Lesenswert?

Joachim B. schrieb:

Das:
1
 return ((UBYTE)(((integer/10)<<4)+(integer%10)));

habe ich verstanden und bereits vom Vorredner übernommen ;) DANKE EUCH!


Was ich allerdings nicht richtig verstehe ist:
1
 return ((UBYTE)(((bcd>>4)*10)+(bcd&15)));

bsp: 00100101

bcd>>10 -> verschiebe bcd 4 Bits nach rechts (aus 0010 | 0101 wird 0000 
| 0010) richtig?
0010 entspricht der zahl 2 und diese wird mit 10 multipliziert was dann 
20 macht.
soweit richtig?

was jetzt aber bcd&15 bedeutet verstehe ich nicht, bzw. dieses &15. 
Vielleicht könntest du mir das noch einmal erklären.

Ich bedanke mich für deine Mühe und verbleibe

Mit freundlichen Grüßen

Balou Baer

von Markus F. (mfro)


Lesenswert?

Balou Baer schrieb:
> dieses &15

Würdest Du ein
1
bcd & 0xf;

eher verstehen?

von Daniel H. (Firma: keine) (commander)


Lesenswert?

Balou Baer schrieb:
> was jetzt aber bcd&15 bedeutet verstehe ich nicht, bzw. dieses &15.

Der Wert wird mit 00001111 maskiert, d.h. die oberen vier Bits sind 
anschließend 0000, so dass nur noch der Wert der unteren vier Bits 
wiedergegeben wird.

100100111 & 00001111 = 00000111

Allerdings ist das Grundlagenwissen bei der (C-)Programmierung...

: Bearbeitet durch User
von Balou B. (baloubaer)


Lesenswert?

Danke

das mit dem 0xF  ^^ wäre in dem Fall wirklich besser gewesen ;)

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.