Umwandlung von binären in C++
Ich habe eine Funktion, die konvertiert zahlen in eine Binärzahl um. Aus irgendeinem Grund funktioniert es nicht. Es gibt den falschen Ausgang. Die Ausgabe erfolgt im binären format, aber es gibt immer das falsche Ergebnis für binäre zahlen, die mit null enden(zumindest das was ich mitbekommen..)
unsigned long long to_binary(unsigned long long x)
{
int rem;
unsigned long long converted = 0;
while (x > 1)
{
rem = x % 2;
x /= 2;
converted += rem;
converted *= 10;
}
converted += x;
return converted;
}
Bitte helfen Sie mir es zu beheben, das ist wirklich frustrierend..
Dank!
- Es ist wirklich frustrierend, denn die zahlen sind bereits in binärer form, und es gibt keine Notwendigkeit, zu konvertieren. Was Sie tun können, ist, zum ausgeben der bits, aber es gibt massig Beispiele im Internet.
- Was Sie tun, ist die Umwandlung in eine Dezimalzahl, das aussieht wie binäre, hat aber den falschen Wert. Was genau ist Ihre Hausaufgabe?
- Ist dieses Hausaufgaben?
- Es ist keine Hausaufgabe. Ich versuche, hier etwas lernen. Ich weiß, zahlen sind bereits binären, aber Sie werden angezeigt als Dezimalzahl. Ich möchte nur die Anzeige als Binär, und das zu tun, muss ich konvertieren Sie die dezimale Darstellung binäre. Oder mache ich das? Wenn es einen Weg gibt, um anzuzeigen, wie Sie Ihre binäre Darstellung, ich möchte wirklich, um es zu sehen. Dank
- möglich, Duplikat der Wie konvertieren eines int in eine binäre Zahl in einen string in C++
Du musst angemeldet sein, um einen Kommentar abzugeben.
Berücksichtigen, z.B. 4.
Nach dem ersten loop iteration:
Nach dem zweiten loop iteration:
Und wird dann umgewandelt zu 1.
Versuchen:
Mit den obigen code mit x als unsigned char (8 bits) mit dem Wert 129 (Binär 10000001)
Beginnend mit
i = 8
Größe von unsigned char * 8. In der ersten Schleife iterationi
7 sein wird. Dann nehmen wirx
(129) und Verlagerung von it-rechten 7 bits, und gibt den Wert 1 ein. Dies ist mit ODER verknüpft, inconverted
die wird 1. Nächste iteration starten wir durch Multiplikationconverted
mit 10 (so, jetzt ist es 10), die wir dann shiftx
6 bits right (Wert, 2) und Endet mit 1 " (Wert wird zu 0). Wir ODER 0 mitconverted
werden, was dann immer noch 10. 3.-7. iteration das gleiche tun, istconverted
wird multipliziert mit 10, und ein bestimmtes bit aus dem es gewonnen wirdx
und mit ODER verknüpft, inconverted
. Nach diesen Iterationenconverted
1000000.In der letzten iteration, erste
converted
wird multipliziert mit 10 und wird zu 10000000, verschieben wirx
rechts 0-bits, woraus sich der ursprüngliche Wert 129. Wir UND x durch 1, ergibt dies den Wert 1. 1 ist dann mit ODER verknüpft, inconverted
, die wird 10000001.Verwendung von std::bitset zu tun, die übersetzung:
Du machst es falsch 😉
http://www.bellaonline.com/articles/art31011.asp
Bleibt von der ersten division ist das bit ganz rechts in der binären form, mit der Funktion wird das bit ganz Links.
Können Sie etwas wie das hier tun :
edit: der code vorgeschlagen von CygnusX1 ist ein wenig effizienter, aber weniger umfassend, ich denke, ich werde beraten, wobei seine version.
Verbesserung : ich habe die stop-Bedingung der while-Schleife, so wir die Zeile entfernen kann, hinzufügen von x am Ende.
Sind Sie eigentlich die Umkehrung der binären Zahl!
to_binary(2) wieder die 01 statt 10. Beim ersten 0es werden abgeschnitten, es wird gleich Aussehen wie die 1.
wie es zu tun auf diese Weise:
Was ist mit std::bitset?
http://www.cplusplus.com/reference/stl/bitset/to_string/
Wenn Sie anzeigen wollen Sie die Zahl als Binär -, müssen Sie zu formatieren und Sie als string. Der einfachste Weg, dies zu tun, die ich kenne, ist die Verwendung der STL bitset.
Die Ausgabe dieses Programms ist:
Wenn Ihr Ziel ist nur die Anzeige, wie Sie Ihre binäre Darstellung, dann können Sie versuchen
itoa
oderstd::bitset
itoa
ist ein nicht-standard-Funktion, die nicht verfügbar ist auf vielen Plattformen (ich habe nur gesehen das auf windows).Hier ist eine einfache Lösung.