• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

c- programm - binär -dezimal

ArT

Mitglied seit
03.07.2002
Beiträge
969
Reaktionen
0
hi

ich brauche für ein schulprojekt den code für ein c programm für das umwandeln von dezimal zu binär.

bedingungen:

16 bit
+ 2 bit kommastellen

wenn wer seiten weiß wo dazu infos gibt plz posten

mfg

ArT
 
Mitglied seit
01.07.2000
Beiträge
1.062
Reaktionen
0
hm
sowas hab ich mal geschrieben
maybe finde ich es
8]
 

Morag

Guest
AFAIK sind im binärsystem keine floats definiert, wie stellst du dir das dann mit den nachkommastellen vor?:confused:
 

Observator

Guest
Was gibt es denn da zu definieren ? Man kann das Komma genauso in binär wie in dezimal verwenden, nur das die Basis des Zahlensystems eben 2 und nicht 10 ist.

Allerdings arbeiten soweit ich weiss alle PC Prozessor Datentypen mit Fliesskomma und nicht mit fester Kommastelle, was einen natürlich nicht hindert trotzdem so ein Programm wie Art das will zu schreiben.
 

Observator

Guest
Wenn ich nochmal darüber nachdenke, erkenne ich aber, dass das Umwandeln von Dezimalnachkommastellen in Binärnachkommastellen nicht ganz so einfach ist wie eine ganze Zahl dezimal->binär und die Nachkommazahl in binär periodisch sein kann.

Wenn man z.B. ,591 nach Binär umwandeln will, kann man das mit dieser Gleichung machen:
591 / 10^3 = x / 2^n
x: Binärnachkommazahl
n: Anzahl an binären Nachkommaziffern

Ich hoffe, dass ist verständlich genug.
 

Morag

Guest
Ich häng mal nen Proggi an, um die Zahl vor dem Komma eines beliebig langen floats in einen String in Binärschreibweise umzuwandeln. Die Lösung ist wahrscheinlich nicht die elegantest, aber ich wollt da jetzt auch nicht allzulange drueber nachdenken.

Ich denke das proggi so zu erweitern, das man die Zahl nach dem Komma noch umwandeln kann, ist trivial.
 

The_Company

Guest
Code:
#include <stdio.h>
/* genauigkeit der Nachkommastellen */
#define GENAUIGKEIT 10
#define MAX_ZEICHEN (sizeof (unsigned int) * 8)
static void print_binary (unsigned int zahl, int stellen) {
  int i;
  int print = (stellen >= MAX_ZEICHEN - 1) ? 1 : 0;
  unsigned int check = 1 << (MAX_ZEICHEN - 1);
  for (i = 0; i < MAX_ZEICHEN; i++) {
    if (zahl & check) {
      printf ("1"); 
      print = 1;
    } else if (print) {
      printf ("0"); 
    }
    if (i + stellen == MAX_ZEICHEN - 1)
      print = 1;
    zahl <<= 1;
  }
}
void print_float_binary (float f) {
  unsigned int ganzzahlpart = (unsigned int) f;
  unsigned int nachkommapart;
  f -= ganzzahlpart; /* da gibs noch ne funktion für "nur nachkommapart" */
  nachkommapart = (unsigned int) (f * (1 << GENAUIGKEIT));
  print_binary (ganzzahlpart, 0);
  printf (".");
  print_binary (nachkommapart, GENAUIGKEIT);
}
static void test (float f) {
  printf ("%f = ", f);
  print_float_binary (f);
  printf ("\n");
}
int main (int argc, char **argv) {
  test (1.5);
  test (100.3333);
  return 0;
}
HF
 

Observator

Guest
Den std libs die dezimal->binär Konvertierung überlassen und das Ergebniss nur noch auslesen, so kam mans natürlich auch machen, zumindest mit dem Ganzzahlenteil.
Aber wenn der Sinn der Aufgabe ist, zu zeigen, dass man weiss wie man Zahlen von dezimal nach binär umwandelt und es in C zu implementieren, dann ist das keine Lösung :ugly: .

Das "schwere" an der Aufgabe ist sowieso der Nachkommateil, aber bei fest 2 Nachkommabits lässt sich das denkfaulerweise auch so lösen:
.dez <= 0.125 => .bin= .OO
0.125 < .dez <= 0.375 => .bin= .OI
0.375 < .dez <= 0.625 => .bin= .IO
0.625 < .dez => .bin = .II
 

Observator

Guest
Original geschrieben von Morag
Ich häng mal nen Proggi an, um die Zahl vor dem Komma eines beliebig langen floats in einen String in Binärschreibweise umzuwandeln. Die Lösung ist wahrscheinlich nicht die elegantest, aber ich wollt da jetzt auch nicht allzulange drueber nachdenken.

Ich denke das proggi so zu erweitern, das man die Zahl nach dem Komma noch umwandeln kann, ist trivial.
Den Nachkommateil in binär umzuwandeln geht NICHT, indem man die Zahl hinterm Komma in binär umgewandelt nimmt.
Beispiel:
0.3
3 ist binär II
0.II ist aber:
1 * 1/(2^0) + 1 * 1/(2^1) = 1/2 + 1/4 = 3/4 = 0.75
0.75 ungleich 0.3

Ein Nachkommateil aus n Ziffern hat in einem Zahlensystem mit Basis b den Wert von
(Nachkommateil als Zahl) / (b^n)

Beispiele:

(dezimal) 0.58 = 58 / 10^2 = 58 / 100

(binär) 0.OIOII = OIOII / 2^5 = OIOII / 32 = 10/32

Daraus geht auch hervor, wie man den Nachkommateil konvertieren kann.
Hmm, was aber eigentlich doch einfach ist :dead:
if dez>= 0.5 {Erstebinärkommastelle=I dez-= 0.5 } ansonsten Erstebinärkommastelle=O
if dez>= 0.25 {Zweitebinärkommastelle=I dez-= 0.25 } ansonsten Zweitebinärkommastelle=O
...
 

ArT

Mitglied seit
03.07.2002
Beiträge
969
Reaktionen
0
vielen dank einmal

also zur erklärung ich (wir sind en 3er gruppe) müssen das c prog dann in ein prog namens DAVE konvertieren der das dann so umwandelt das das microcontroller board was wir gebaut haben die daten verarbeiten kann.

am ende soll es möglich sein per tastertur eine dezimalzahl einzugeben und dann auf einen display das wir ansteuern die binäryzahl sehn.

ich werd mir eure lösungsvorschläge mit meiner gruppe ansehen und mir erlauben falls es wo schwierigkeiten gibt hier wieder zu fragen

also nochmal vielen dank für die mühe

mfg

ArT
 

The_Company

Guest
Original geschrieben von Imperator
Den std libs die dezimal->binär Konvertierung überlassen und das Ergebniss nur noch auslesen, so kam mans natürlich auch machen, zumindest mit dem Ganzzahlenteil.
Wenn man scharf drauf ist sowas selber zu implementieren, dann kann man sich den Code ja aus der stdlib kopieren.
 
Oben