Zum Inhalt springen

Potenzen in C++


Whitescar

Empfohlene Beiträge

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++?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen


	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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...