C# Binär zu Dezimal Umrechnung?
string binär = "";
bool incorrectInput = false;
int sum = 0;
int stellenwert = 1;
while (!incorrectInput)
{
Console.Write("Geben Sie eine Binärzahl ein: ");
binär = Console.ReadLine();
incorrectInput = true;
for (int i = binär.Length - 1; i >= 0; i--)
{
if (binär[i] != '0' && binär[i] != '1')
{
Console.WriteLine(binär + "ist keine gültige Binärzahl!");
incorrectInput = false;
break;
}
else
{
sum = sum + binär[i] * stellenwert;
stellenwert = stellenwert * 2;
}
}
}
Console.WriteLine(binär + " ist eine gültige Binärzahl!");
Console.WriteLine(stellenwert);
Leute kann wer hier mein Fehler finden, es kommt bei Ausgabe falsche Ergebnis
2 Antworten
Hier das sollte funktionieren:
string binZahl;
const string binPattern = "^[1|0]{1,32}$";
System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(binPattern);
string input = "";
int stellenwert = 1;
int sum = 0;
while (!regex.Match(input).Success)
{
Console.Write("Bitte geben Sie eine Binärzahl ein: ");
input = Console.ReadLine();
}
binZahl = input;
for (int i = binZahl.Length -1; i > -1; i--)
{
sum += (binZahl[i] - 48) * stellenwert;
stellenwert *= 2;
}
Console.WriteLine("Die Binärezahl {0} ist äquivalent zu der Dezimalzahl {1}",binZahl,sum);
Console.Read();
wieso gibst du den auch nicht die summe aus sondern den stellenwert ?
hä
erklär mal was rauskommen soll und was rauskommt .
001111 habe ich eingegeben statt 15 kommt 3039 raus
ja weil du binär[i] was ein zeichen ist in ein INT umwandelst.
laut ascii z.b. ist das Zeichen 0 der INT wert 48
ergo musst du dein STRING umwandeln in eine ZAHL
du könntest natürlich einfach
((int)binär[i]-48)
machen dann hättest du die 0
oder sowa wie
parseINT(binär[i])
z.b.
using System;
class HelloWorld {
static void Main() {
string binär = "";
bool incorrectInput = false;
int sum = 0;
int stellenwert = 1;
while (!incorrectInput)
{
Console.Write("Geben Sie eine Binärzahl ein: ");
binär = Console.ReadLine();
incorrectInput = true;
for (int i = binär.Length - 1; i >= 0; i--)
{
if (binär[i] != '0' && binär[i] != '1')
{
Console.WriteLine(binär + "ist keine gültige Binärzahl!");
incorrectInput = false;
break;
}
else
{
sum = sum + (((int)binär[i]-48) * stellenwert);
stellenwert = stellenwert * 2;
}
}
}
Console.WriteLine(binär + " ist eine gültige Binärzahl!");
Console.WriteLine(sum);
}
}
ich weiss nicht ob es parseInt in deiner Sprache gibt . oder ob das da anders heisst. das musste selber suchen .
???
verstehst du dein eigenen code nicht ?
was soll es bringen immer 48 abzuziehen von einer summe ?
sorry aber denk nochmal darüber nach wie binäre zahlen oder dezimal zahlen berechnet werden.
wenn man das so wie du machst kommt für die scheifen folgendes raus
001111
letzte stelle zuerst
string = '1' = integer = 49 , weil das so ist mit den zeichen , das A liegt bei 65 . die tabelle bestimmt welchen INT wert zeichen hat, nicht dein AUGE
also steht bei dir
49 * 1 = 49
es müsste aber
1 * 1 = 1 rauskommen
beim nächsten dann
49 * 2 = 98
es müsste aber
1 * 2 = 2
dann
49 * 4 = 196
haben willst du aber
1 * 4 = 4
und so weiter und sofort
was soll dir das also bringen am ende 48 abzuziehen ? erklär mal
du rechnest mit 49 willst aber mit 1 mal nehmen oder 0 (48-48) ,
also wäre das (49-48) * stellenwert bei jedem durchgang bei 1 , bzw (48-48) * stellenwert bei 0
falls dir was unklar ist, einfach mal nachlesen wie Zeichen und Zahlen sich unterscheiden
ja wenn ich auch die sum ausgebe kommt so ein riesige Zahl raus und natürlich auch falsch