Quoted
Schreiben Sie ein C++-Programm, das eine bin¨are Ziffernfolge einliest (nur Betrag, kein Vorzeichen),
z.B. 1101, und den entsprechenden dezimalen Wert ausgibt. Die bin¨are Ziffernfolge
wird zeichenweise von der Tastatur eingelesen. Jedes Zeichen wird unmittelbar verwendet, um
das Ergebnis zu aktualisieren.
Hinweis: Lesen Sie die einzelnen Zeichen in eine char-Variablen ein. Verwenden Sie hierzu das
Kommando cin.get(Variablenname), wobei Variablenname der Name der char-Variablen
ist. Der Kopf der Schleife k¨onnte somit folgendes Aussehen haben:
while (cin.get(c) && ( c == ’0’ || c == ’1’))
{
...
}
Gehen Sie bei der Berechnung des dezimalen Wertes einer bin¨aren Zahl von der Potenzreihendarstellung
zur Basis 2 aus:
z.B. 1101: 1*2³ + 1*2² + 0*2^1 + 1*2^0
Ich probier mal weiter aber vll hat ja jemand nen Denkanstoß... |
|
C Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> using namespace std; int main () { cout << "Dieses Programm rechnet von binären Zahlenfolgen in dezimale Zahlenwerte um! " << endl; cout << " " << endl; cout << "Bitte Zahlen eingeben (nur 0 und 1 werden akzeptiert): " << endl; char c; while (cin.get(c) && ( c == ’0’ || c == ’1’)) { } } |
|
|
C Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <iostream> #include <bitset> int main() { char c; std::bitset<sizeof(long)*8> bset; std::cout<<"Bits eingeben:\n"; while (std::cin.get(c) && ( c == '0' || c == '1')) { bset = bset<<1; if(c=='0') bset.set(0,false); else bset.set(0,true); std::cin.get();//return konsumieren } std::cout<<bset.to_string()<<std::endl; std::cout<<bset.to_ulong()<<std::endl; return 0; } |
Quoted from ""void""
![]()
C Quellcode
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <iostream> #include <bitset> int main() { char c; std::bitset<sizeof(long)*8> bset; std::cout<<"Bits eingeben:\n"; while (std::cin.get(c) && ( c == '0' || c == '1')) { bset = bset<<1; if(c=='0') bset.set(0,false); else bset.set(0,true); std::cin.get();//return konsumieren } std::cout<<bset.to_string()<<std::endl; std::cout<<bset.to_ulong()<<std::endl; return 0; }
An deinen Programmierkenntnissen musst du unbedingt was machen.
Sonst wirst du im Informatikstudium noch enorme Probleme bekommen.
Gruß void

IN die Schleife packt gehts wie gewünscht. :roll:
Quoted
std::cout<<bset.to_string()<<std::endl;
std::cout<<bset.to_ulong()<<std::endl;
|
|
C Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <iostream> #include <bitset> int main() { char c; long value=0; std::cout<<"Bits eingeben:\n"; while (std::cin.get(c) && ( c == '0' || c == '1')) { value <<= 1; if(c=='1') value +=1; std::cout<<"Aktueller Wert:"<<value<<std::endl; std::cin.get();//return konsumieren } return 0; } |
Quoted
value <<= 1;
if(c=='1')
value +=1;
Das += kannte ich bisher nicht.
Quoted
value=value+1;
Quoted from ""DasBunny""
Quoted
value <<= 1
Der Wert "1" wird an value übergeben.
:
Quoted
Genauso wie mit Hilfe des arithmetischen Operators + ein kombinierter Zuweisungsoperator += gebildet werden kann, können mit anderen Operatoren folgende kombinierte Zuweisungsoperatoren gebildet werden: -=, *=, /=, %=, &=, |=, ^=, <<= und >>=.
Quoted from ""phax""
![]()
C Quellcode
1value <<= 1;
ist eine Kurzversion von
![]()
C Quellcode
1value = value << 1;
<< steht für Shift-Left
<< 1 ist ein Spezilefall und ist die performanteste Variante eine Multiplikation mit 2 durchzuführen
dann müsste ich das ganze ja auch durch value = value*2 ersetzen können, so funktioniert das Programm jedoch nicht richtig