Was haltet ihr davon
-
Ich habe mal versucht ein Programm zu tippen, welches mir bei Eingaben von Zeichen oder Zahlen die Binäre ausgabe des chars lifert.
// Binäre Ausgabe #include <iostream> #include <cstdlib> using namespace std; void main() { char input; int max; while(true) { cout<<"Anzahl des Schleifendurchlaufs (min.0 max.9): "; cin>>max; if(max>=0 && max<=9) break; else continue; } for(int i=0; i<max; i=i+1) { cout<<"\nZeichen: "; cin>>input; int d_feld[8]; int m_feld[8]; d_feld[0]=input; for(int i=0; i<8; i=i+1) { d_feld[i+1] = d_feld[i]/2; m_feld[i] = d_feld[i]%2; } cout<<input<<": "; for(int i=7; i>=0; i=i-1) cout<<m_feld[i]; } }
Gibt es eine leichtere und bessere Möglichkeit, so eine Aufgabe durchzuführen? Vielleicht eine spezielle Funktion?
-
Ja, z.B. so prüfst du ob das 128er-Bit in einem char c gesetzt ist...
bool b128 = (c & 128); // Ergibt true wenn gesetzt, ansonsten false
-
Ziemlich umständlich und obendrein falsch: Du schreibst hier:
for(int i=0; i<8; i=i+1) { d_feld[i+1] = d_feld[i]/2; m_feld[i] = d_feld[i]%2; }
im letzten Schleifendurchlauf bei i = 7 über die Grenzen von d_feld hinaus.
ne einfachere variante:
#include <climits> #include <ostream> void binout(std::ostream& os, char c) { for (unsigned i = 0; i < CHAR_BIT; ++i) os.put((c & (1 << (CHAR_BIT - 1 - i))) ? '1' : '0'); }
[ Dieser Beitrag wurde am 02.06.2003 um 16:50 Uhr von Bashar editiert. ]
-
oder so:
void binout(std::ostream& os, char c) { for (unsigned bit = 1 << (CHAR_BIT - 1); bit != 0; bit >>= 1) os.put(c & bit ? '1' : '0'); }
[ Dieser Beitrag wurde am 02.06.2003 um 16:56 Uhr von Bashar editiert. ]
-
Ne andere Möglichkeit wäre noch std::bitset. Aber der frisst glaub ich nur unsigned long...
-
Hallo.
Nur so nebenbei: Es ist eine schlechte Angewohnheit, die main-Funktion als "void" zu deklarieren.cu
BodPa
-
Original erstellt von BodPa:
**Hallo.
Nur so nebenbei: Es ist eine schlechte Angewohnheit, die main-Funktion als "void" zu deklarieren.cu
BodPa**Und wieso bitte soll diese Angewohnheit schlecht sein?
-
Original erstellt von <cc>:
Und wieso bitte soll diese Angewohnheit schlecht sein?weil main laut Standard int zurückgeben muss!
http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=main#Answ
außerdem solltest du die ++ Operatoren bzw. <op>= Operatoren benutzen, da diese schneller sind, als die Verwendung von a=a<op>b
-
Statt:
void main ()
{
...
}müsste es eigentlich heißen :
int main ()
{
...
return 0;
}und statt i=i+1; schreibt man für gewöhnlich ++i;
Auch möglich: i+=1;