Versuche grad eine Hexzahl in Dezimal umzurechnen mit Hilfe der Ascii
Tabelle in C++. Allerdings funktioniert es nicht so wie es soll.
Die if Schleife durchläuft er richtig und das Ergebnis stimmt auch,
allerdings bei denn beide else if's kommt das Falsche raus kann mit
jemand helfen?
danke schon mal
1
#include<iostream>
2
usingnamespacestd;
3
4
intb,c,d;
5
chara;
6
7
intmain(){
8
cout<<"Ihre Hexadezimalzahl ist: ";
9
cin>>a;
10
cout<<a<<"\n";
11
if(a=='a'||'b'||'c'||'d'||'e'||'f'){
12
b=a-87;
13
cout<<"Der Dezimalwert der Hexadezimalziffer "<<a<<" ist "<<b<<"\n";
14
}
15
elseif(a=='A'||'B'||'C'||'D'||'E'||'F'){
16
c=a-55;
17
cout<<"Der Dezimalwert der Hexadezimalziffer "<<a<<" ist "<<c<<"\n";
Michael Estner schrieb:> if(a == 'a'||'b'||'c'||'d'||'e'||'f'){
ich kenn zwar nicht den neusten C++ Standard, aber dieser Syntax ist mir
neu und macht bestimmt nicht was du willst.
Noch einer schrieb:> Die Syntax ist OK.>> C rechnet zuerst a'||'b'||'c'||'d'||'e'||'f' und vergleicht dann das> Ergebnis mit a.
Auch wenn Du recht hast finde ich es für einen Anfänger schwer
verständlich, dass Du auch speziell mit der letzten Teil darauf
hinweisen willst, dass es wohl nicht das ist, was der TO bezwecken will.
Noch einer schrieb:> Die Syntax ist OK.>> C rechnet zuerst a'||'b'||'c'||'d'||'e'||'f' und vergleicht dann das> Ergebnis mit a.
Egal ob == oder || vorgehen, da kommt Murks heraus. Wenn == vorgeht
sowieso, aber auch wenn man's klammert oder Du 'n Compiler hast der ||
die Präferenz gibt. Warum?
97 || 98 || 99 || 100 || 101 || 102
Das Ergebnis davon ist 103. Und damit ist a == .... NIEMALS true. Weil
103 ist der ascii-code von g.
Und warum ist es 103?
Weil die Veroderung von Zahlen einfach nur alle Bits setzt die in
irgendeiner der Zahlen gesetzt sind.
Entsprechend ist so ein a || b || c ... Konstrukt in fast jedem Fall
Grütze. Syntaktisch korrekt, und der Compiler frisst es auch. Rauskommen
tut nur halt fast sicher Nonsense.
Heinz L. schrieb:> 97 || 98 || 99 || 100 || 101 || 102>> Das Ergebnis davon ist 103. Und damit ist a == .... NIEMALS true. Weil> 103 ist der ascii-code von g.>> Und warum ist es 103?>> Weil die Veroderung von Zahlen einfach nur alle Bits setzt die in> irgendeiner der Zahlen gesetzt sind.
aber nur bei | und nicht mit ||
bitweise oder / logisch oder
Heinz L. schrieb:> 97 || 98 || 99 || 100 || 101 || 102>> Das Ergebnis davon ist 103.
Falsch. Das Ergebnis ist 1.
> Und warum ist es 103?>> Weil die Veroderung von Zahlen einfach nur alle Bits setzt die in> irgendeiner der Zahlen gesetzt sind.
Nur daß es sich hier um ein boolesches Oder handelt. Das nimmt jeden
Wert, der 0 ist, als false und jeden anderen als true. Das Ergebnis ist
dann 0 für false und 1 für true.
> Entsprechend ist so ein a || b || c ... Konstrukt in fast jedem Fall> Grütze.
Nein, der ist oft nützlich. In diesem Fall macht er aber was völlig
anderes als beabsichtigt.
Rene H. schrieb:> Timmo H. schrieb:>> Wieso nicht einfach strtol/strtoul?>> Und dann? Für Hex geht das nicht.
Nicht ganz.
strtol bzw strtoul kann man die Basis des Zahlensystems schon angeben.
Aber inklusive Fehlererkennung und allem drum und drann ist die Lösung
mittels strtol dann schon deutlich aufwändiger als eine simple
Fallunterscheidung für ein hexadezimales Digit.
Wenn man bei strtol '0' als Basis nimmt ist eine Autoerkennnung für
0x.... drin. Warum wird hier das Rad ständig neu erfunden?
Da wo es geht sollte man immer auf Standardfunktionen zurückgreifen, die
sind bereits hochoptimiert, und wenn es um "PC-Programmierung" geht,
sind ein paar Bytes/Clocks mehr die das ganze brauch doch eh wurst.
Programmiere zwar ASM, aber vielleicht hilft es dir trotzdem:
In deine Variablen a Bit5 löschen, dann hast du auf jeden Fall einen
Grossbuchstaben.
Nun von a 48 oder '0' abziehen.
Ist a > 9 noch mal 7 abziehen.
Fertig, und nur ein IF gebraucht
Jürgen schrieb:> In deine Variablen a Bit5 löschen, dann hast du auf jeden Fall einen> Grossbuchstaben.
Dafür gibt es in C toupper> Fertig, und nur ein IF gebraucht
Und was ist, wenn z.B ein 'g' eingegeben wurde?
Zudem funktioniert dein Code nur für ASCII (oder Abarten davon)
#include<stdio.h>
int main(){
char num ;
printf("gibt dein hexnummer ein bitte");
scanf("%hx",&num);
printf("hex =%hx und das ist dezimal =%d\n",num, num);
return 0;
}