Wie kann ich short binär ausgeben?
-
mach ne union mit short und bool und interpretiere true als 1 und flase als 0
-
Geh einfach jedes bit durch und geb aus ob es gesetzt ist oder nicht.
Die entsprechenden Werte entweder selber ausrechnen oder die 1 durchshiften. Auf die richtige Bitoperation wirst du hoffentlich selber kommen
-
nein, eigentlich komm ich nciht drauf!
HAb auch das mit dem union nicht verstanden
-
Bitoperation schrieb:
nein, eigentlich komm ich nciht drauf!
HAb auch das mit dem union nicht verstanden
Irgendwie so sollte es doch gehen...
short int x = 16; for (unsigned int i1 = 0; i1 < 15 /* (oder 14?) */; i1++) { cout << (x & 0x1); x = x << 1; }
... und dann die Ausgabe umdrehen
-
Klasse: also das mit den Bitoperationen versteh ich nicht so richtig..... =(!
Wäre auch über ein beispiel der anderen beiden möglichkeiten dankbar!
-
Natürlich in die richtige Richtung shiften!!!
[cpp]
short int x = 16;for (unsigned int i1 = 0; i1 < 15 /* (oder 14?) */; i1++) {
cout << (x & 0x1);
x = x >> 1;
}
[/cpp]... und dann die Ausgabe umdrehen[/quote]
-
Wenn du dir das "Ausgabe umdrehen" sparen willst
kannst du natürlich auch nach links shiften und mit 16tausenschlagmichtod (2^16-1) &'en
also
cout << (x & 16XXX);
x = x << 1;
-
Hmm... nicht eher sowas hier?
short x=10; int i; for(i=1;i<=x;i*=2); for(;i>0;i/=2) cout<<((x&i)>0);
EDIT: Verdammt... wie blöd, wenn man lange kein Standard-C++ gemacht hat ^^ Nach 4x Editieren sollte es so aber mal funzen...
-
#include <iostream> int main() { unsigned short num = 4242; const unsigned short short_bits = sizeof(unsigned short) * 8; unsigned short bit = 1 << short_bits-1; do { std::cout << ((num & bit) != 0); bit >>= 1; } while (bit != 0); std::cout << std::endl; }
-
Hmm... der Code ist mir zu lang... hier ist das, wie ich es gemacht hab und es läuft einwandfrei:
#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int x=10385; int i; for(i=1;i<x;i*=2); for(;i>0;i/=2) cout<<((x&i)>0); cout<<endl; getchar(); return 0; }
-
Windoof schrieb:
for(i=1;i<x;i*=2);
Die ist wirklich übel. Wie wär's mit nem Kommentar, in der nächsten Zeile am besten?
-
finix schrieb:
const unsigned short short_bits = sizeof(unsigned short) * 8;
hätt' ich das geschrieben dann hätte mir jetzt einer erzählt man solle CHAR_BIT statt 8 verwenden
-
finix schrieb:
Die ist wirklich übel. Wie wär's mit nem Kommentar, in der nächsten Zeile am besten?
Häh?
-
finix schrieb:
Windoof schrieb:
for(i=1;i<x;i*=2);
Die ist wirklich übel. Wie wär's mit nem Kommentar, in der nächsten Zeile am besten?
bitte keinen kommentar.
-
net schrieb:
finix schrieb:
const unsigned short short_bits = sizeof(unsigned short) * 8;
hätt' ich das geschrieben dann hätte mir jetzt einer erzählt man solle CHAR_BIT statt 8 verwenden
Ok, dann die hier revidierte Fassung, inklusive <climits> und korrekter Terminologie:
#include <iostream> #include <climits> int main() { unsigned short num = 4242; const unsigned short short_bits = sizeof(unsigned short) * CHAR_BIT; unsigned short mask = 1 << short_bits-1; do { std::cout << ((num & mask) != 0); } while ((mask >>= 1) != 0); std::cout << std::endl; }
-
volkard schrieb:
bitte keinen kommentar.
Zum Code oder zur Erklärung?
-
finix schrieb:
const unsigned short short_bits = sizeof(unsigned short) * CHAR_BIT;
gibts dafür nicht traits? mach das mal modern.
-
volkard schrieb:
finix schrieb:
const unsigned short short_bits = sizeof(unsigned short) * CHAR_BIT;
gibts dafür nicht traits? mach das mal modern.
Ja, genau, du hast recht.
Am besten als template realisiert.
Mit Policy, führende Nullen ausgeben oder nicht.
Und Spezialfallbehandlung, min & max z.B.
Diese simple Übungsaufgabe gehört echt verkompliziert.
-
finix schrieb:
volkard schrieb:
finix schrieb:
const unsigned short short_bits = sizeof(unsigned short) * CHAR_BIT;
gibts dafür nicht traits? mach das mal modern.
Ja, genau, du hast recht.
Am besten als template realisiert.
Mit Policy, führende Nullen ausgeben oder nicht.
Und Spezialfallbehandlung, min & max z.B.
Diese simple Übungsaufgabe gehört echt verkompliziert.sorry, aber wer so grottenhäßlichen code schreibt wie du, der muss auch mal auf mich hören. schau, ob die numeric_limits benutzen kannst. und berichte am nesten nachher hier.
-
finix schrieb:
volkard schrieb:
bitte keinen kommentar.
Zum Code oder zur Erklärung?
den code nicht kommentieren.
sondern anders schreiben.for(i=1;i<x;i*=2) ;
oder
for(i=1;i<x;i*=2){ }
oder
for(i=1;i<x;i*=2) doNothing();
oder irgendwie halt, daß man das da sauber lesen kann. aber schmutzigen conde nicht kommentieren, statt zu reinigen.