Dezimalzahl in Binärzahl in C#

Kosta97

Newbie
Registriert
Aug. 2018
Beiträge
5
Hallo, für meine Aufhabe muss ich eine eingegebene Dezimalzahl in eine Binär- bzw. Dualzahl konvertieren. Mein Ansatz wäre die Zahl solange durch 2 zu teilen bis nichts mehr übrig ist. Handelt sich es dabei um eine ganze Zahl nach der Teilung gebe ich 0 aus wenn die Zahl gerade ist, sonst 1.

Mein Problem: Ich weis nicht wie ich abfragen kann ob die Zahl gerade ist nach einer Teilung, ich habe ja eine Float-Zahl, demzufolge kann es ja nie eine ganze zahl geben.... bin ein blutiger Anfänger daher Dankbar für jeden Tipp.

Mein Hauptteil vom Code:


float value;

printf("Bitte geben Sie ine Zahl ein, die in eine Dualzahl konvertiert werden soll.\n\n");
scanf("%f", &value);
while(value != 0){
value / 2;
if(value == int){
printf("0");}
else{
printf("1");
}
 
Warum die Welt neu erfinden, wenn es was Fertiges gibt? https://docs.microsoft.com/en-us/do...r?redirectedfrom=MSDN&view=netframework-4.7.2

Ja ich weiß bla bla lernen bla bla ... jeder Entwickler, der alles in Vanilla macht und auf fertige Funktionen verzichtet, hat einen an der Klatsche ;)

Und als Anfänger kann man gar nicht zu viel Zeit auf Stackoverflow verbringen. Irgendwann hat man dann auch die "Sprache" drauf und findet sich in den API Docs zurecht.
 
  • Gefällt mir
Reaktionen: I'm unknown
Für einen Int-Wert wäre es einfach:
C#:
string binary = Convert.ToString(value, 2);


Für einen Float-Wert den Wert in Bytes zerlegen und anschließend den String zusammen bauen:
How to convert float/double/ulong into binary/otcal/hex string


C#:
string s = String.Empty;

// value is the value you want to convert to a string (double, long, int, ...)

foreach (byte b in BitConverter.GetBytes(value))
{
   // For hex use 16 and 2. For binary use 2 and 8. For octal use 8 and 3.
   s += Convert.ToString(b,2).PadLeft(8,'0');
}
 
Zuletzt bearbeitet:
Kosta97 schrieb:
Mein Problem: Ich weis nicht wie ich abfragen kann ob die Zahl gerade ist nach einer Teilung, ich habe ja eine Float-Zahl, demzufolge kann es ja nie eine ganze zahl geben.... bin ein blutiger Anfänger daher Dankbar für jeden Tipp.
Du musst die Vorkomma- und Nachkommastellen getrennt betrachten. Letztere immer mit 2 multiplizieren und bei den Dezimalstellen der Binärzahl 1 anfügen, wenn sich beim Ergebnis die Zahl vor dem Komma erhöht, andernfalls 0.

Beispiel zum Nachvollziehen ist z.B. hier: https://ryanstutorials.net/binary-tutorial/binary-floating-point.php
 
Hallo Kosta,
die "richtige" Funktion in C heisst "div()". Diese liefert den Rest (.rem) und die Zahl (in .quot). Ich habe einfach mal zwei oder drei Sachen in Deinem Programm verschlimmbessert und jetzt geht es.
Schau Dir bitte mal die von mir hinzugefügte Zeile genau an. Achtung: die Bits werden "verkehrtherum" ausgegeben, da die Division Deine Zahl zuerst von den niederwertigsten Bytes her zerlegt, wir aber in der Schrift die Zahl "von links" mit den höherwertigen Bytes zuerst schreiben. Dein PC die Zahlen in dieser Anordnung speichert. Beispiel: 6 ist binär "110", ausgegeben wird "011", also genau andersrum.
C:
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>      /* scanf, printf */
#include <stdlib.h>     /* div, div_t */

int main()
{
int wert;
printf("Bitte geben Sie eine Zahl ein, die in "
        "eine Dualzahl konvertiert werden soll.\n");
scanf("%d", &wert);
while (wert > 0) {
    div_t ergebnis = div(wert, 2);
    wert = ergebnis.quot;
    if (ergebnis.rem == 1) {
       printf("1");
    }
    else {
       printf("0");
    }
}
printf("\n");
return 0;
}
 
Zuletzt bearbeitet:
iamunknown schrieb:
Nö, die richtige Lösung hatte @blablub1212 schon verlinkt.
Das ist für C#, der OP wollte aber sicherlich C und hat offensichtlich nur versehentlich das C#-Forum gewählt. Vielleicht könnte ein Mod das noch rüberschieben.
Ausserdem finde ich es immer schön, wenn man die bereits "erarbeiteten" Programme des Fragestellers nehmen kann und mit minimalen Änderungen zum Laufen bekommt, das hat imho einen höheren Lerneffekt und ist gut für die Motivation.
 
Asche auf mein Haupt, mit scanf und printf ist selbstverständlich C# nicht gemeint.

Man könnte vom TE aber zumindest erwarten das richtige (Sub-)Forum zu wählen, auch wenn das nicht als Entschuldigung dienen soll ;).
 
iamunknown schrieb:
auch wenn das nicht als Entschuldigung dienen soll.
Naja, Du bist ja noch nicht so lange hier, da kann das schon mal passieren ;)
 
Danke @blöderidiot, für einen Anfänger ist es immer schön zu sehen, wenn der eigene Code teilweise noch verwendet wird. Vieles verstehe ich so einfacher.
 
Zurück
Oben