Whitescar Geschrieben 29. August 2002 Geschrieben 29. August 2002 Also ich hzab vor einen Umrechner zu schreiben und zwar soll er binär in dezimal und umgekeht berechnen können, also binär zu dezimal ist kein thema das ist ja einfach mit if-anweisungen getan aber andersherum ist das "für mich" scho schwieriger! Nun meine Frage gibt es noch andere Möglichkeiten dezimalzahlen umzurechnen als diese hier: Dezimalzahl: 86 86-128 = 0 86-64 = 1 22-32 = 0 22-16 = 1 6-8 = 0 6-4 = 1 2-2 = 1 0-1 = 0 Also ich hab das mit if.anweisungen versucht doch brauche ich dann 128 if-asnweisungen für ne 8bit verschlüsselung also wenn jemand einen quelltext oda so postet dann bitte auch ein wenig erklären dangö Und wie schreibt man Potenzen in c++? Zitieren
Orffi Geschrieben 29. August 2002 Geschrieben 29. August 2002 Die Funktion pow aus <cmath> potenziert 2 Zahlen: a = pow ( b, c ); wobei a, b, c alles Variablen vom Typ double sind. Zur Ausgabe der binären Darstellung würde ich mir den shift-Operator ansehen. Zum Beispiel: std::cout << ( a & 1 ); gibt das lsb aus. mit a >> 1; schiebt man das erste bit aus der Variable heraus und das 2. Bit ist nun das lsb. Wahrscheinlich ist jetzt die Ausgabe nicht, nach Deinen Wünschen, also mußt Du noch einmal ein wenig zaubern. Statt std::cout << ( a & 1 ); schreibst Du folgendes: b = ~( (~0) << 1 ); std::cout << ( a & b ); ~ ist ein unärer Operator, der alle Bits einmal umdreht. Aus zum Beispiel 0110 wird 1001. HTH Jan Zitieren
Whitescar Geschrieben 29. August 2002 Autor Geschrieben 29. August 2002 Jo also du hast es bestimmt richtig erklärt aber ich hab es nicht verstanden sorry also ich mach c++ im moment hobby mäßig, könntest du das vielleicht etwas ´"unfachchenisischer" erklären also ich hab noch so meine probleme mit den ganzes ~(~) usw... habe bisher auch nur mit der iostream.h gearbeitet also ich bin da noch totaler newbie drin <<<<Die Funktion pow aus <cmath> potenziert 2 Zahlen: a = pow ( b, c ); wobei a, b, c alles Variablen vom Typ double sind. ../ v kapiert! <<<< std::cout << ( a & 1 ); gibt das lsb aus. \/ also hier hapert es schon std:: (?) /\ <<<< mit a >> 1; schiebt man das erste bit aus der Variable heraus und das 2. Bit ist nun das lsb. Wahrscheinlich ist jetzt die Ausgabe nicht, nach Deinen Wünschen, also mußt Du noch einmal ein wenig zaubern. Statt std::cout << ( a & 1 ); schreibst Du folgendes: b = ~( (~0) << 1 ); std::cout << ( a & b ); ~ ist ein unärer Operator, der alle Bits einmal umdreht. Aus zum Beispiel 0110 wird 1001. \/ /\ Also mit dem kram hab ich noch gar nicht gearbeitet *hehe* Also ich wollte das wohl mehr "zu fuß" machen! Obwohl das natürlich beastimmt funktioniert aber gibt es nicht noch ne andere Möglichkeit wo man keine include Dateien (sind doch welche oda????) Achja ich benutze nen c++ builder von borland (wenns was bringt Ja aber erstamal dangö für die flotte nachricht Je öfter ich das durchlese desto mehr sinn ergibt es *lool* greeez whitescar Zitieren
Crush Geschrieben 29. August 2002 Geschrieben 29. August 2002 int inputbyte=0xacacac81; unsigned int y=0x80000000; CString Ausgabe; do { if (inputbyte&y) Ausgabe+="1"; else Ausgabe+="0"; // oder alternativ: Ausgabe+=((inputbyte & y) ? '1' : '0'); } while (y>>=1); Die Zahl muß hier als int in inputbyte vorliegen, ansonsten einen String mit atoi() umwandeln! Y ist zum Ausmaskieren des entsprechenden Bits. Ich mache das über CString, weil es da den +=-Operator gibt, welcher für diesen Zweck sehr praktisch ist. Das abzufragende Bit wird getestet und je nachdem ein 0er oder 1er in den String reingeschoben - fertig! Außerdem zählt das Bit als Abbruchkriterium für die Schleife. Zitieren
Orffi Geschrieben 29. August 2002 Geschrieben 29. August 2002 Auch wenn es noch keiner bemerkt hat: Ich muß gestehen, daß in meinem Post ein Fehler ist, tut mir leid. Ich schrieb: b = ~( (~0) << 1 ); Das ist FALSCH! Richtig wäre: b = ~( (~0) >> 1 ); So, jetzt will ich auch die Zeile erklären. Wenn ich eine Variable mit 0 belege, dann sind alle Bits 0. Wenn ich nun ~0 schreibe, dann sind alle Bits mit 1 belegt. Wenn ich nun alle Bits um 1 nach rechts verschiebe, dann wird eine 0 nach geschoben. Zum Beispiel wird aus 1111 wird 0111. Wenn ich nun diese Bits wieder umdrehe, dann habe ich 1000. Mit diesem gesetzten Bit (und dem und-Operator &) "taste" ich die anderen Bits ab. Mehr sollte es nicht sein. Zu std:: : Es bedeutet, das man cout aus dem Namensbereich std benutzt. Wenn Du noch nicht so weit bist, ist das alles halb so schlimm. Das Problem ist nur das Folgende: #include<iostream.h> ist kein C++ Standard, deswegen verwende ich diese schreibweise nicht. Die richtige wäre #include <iostream> (also ohne ".h"). Bei dieser schreibweise muß man noch beachten, daß cout im Namespace std liegt. Man kann also mit std::cout auf cout zugreifen. Natürlich kann man auch using namespace std; schreiben. Aber ich will Dich nicht weiter verwirren, es wird sicherlich noch alles in Deinem Buch erklärt werden. Wenn es Dir hilft, dann vergißt Du am besten meine Posts. ;-) HTH Jan Zitieren
Crush Geschrieben 29. August 2002 Geschrieben 29. August 2002 Ist ja fast so wild wie meine altes Lampenbeispiel =8-D Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.