Wie zu Lesen eine binäre Zahl als Eingabe?
Gibt es eine Möglichkeit für den Benutzer zur Eingabe einer Binär-Zahl in C oder C++?
Wenn wir so etwas schreiben
int a = 0b1010;
std::cout << a << std::endl
Dann die Ausgabe kommt heraus 10 (bei Verwendung der entsprechenden compiler-Erweiterungen).
aber wenn wir versuchen, zu schreiben
int n;
std::cin >> n;
int t = 0bn;
Es gibt uns einen Fehler, so kann jeder jeden schlagen, wie können wir direkt Lesen binäre Zahl als Eingabe anstatt mit string zum speichern der Eingabe?
google Suche, Erster Eintrag: cplusplus.com/forum/general/103479
Das ist, was ich denke, die Frage ist eigentlich über. Es ist schade, das Sie nicht haben, eine
Das ist, was ich denke, die Frage ist eigentlich über. Es ist schade, das Sie nicht haben, eine
bin
IO Manipulators zu gehen mit hex
und dec
und oct
. Vielleicht werde ich versuchen, Ihnen vorschlagen, jetzt, binäre Literale sind ein standard, was.InformationsquelleAutor iec2011007 | 2014-08-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist ein wenig Verwirrung hier, lassen Sie uns zu entwirren die es ein bisschen.
0b1010
ist ein integer-literal, eine Konstante, compile-time-integer-Wert, geschrieben in Basis-2. Ebenso0xA
ist ein Literalwert in Basis 16 und10
ist in der Basis 10. Alle diese beziehen sich auf die gleiche integer -, es ist nur ein anderer Weg, zu sagen, der compiler, welche Zahl du meinst. Zur Laufzeit wird im Speicher, der integer ist immer dargestellt, die als Basis-2-Nummer.std::cout << a
; ist der integer-Wert vona
und gibt eine string-Darstellung. Standardmäßig gibt es in der Basis 10, aber Sie kann ich.e verwenden Sie diestd::hex
modifier haben es die Ausgabe, die es in der Basis 16. Es gibt keine VORGEGEBENE modifier drucken in binären. Damit Sie tun müssen auf Ihrer eigenen (oder google es, es ist eine Allgemeine Frage).0b
endlich ist nur verwendet, um zu definieren, integer-Literale. Es ist nicht eine runtime-Betreiber. Recall, alleint
s dargestellt, die als Basis 2 Nummern im Speicher. Andere Basen bestehen nicht aus einer Maschine Sichtint
istint
, so gibt es nichts zu konvertieren. Wenn Sie Lesen müssen, eine binäre Zahl aus einer Zeichenfolge, die Sie Rollen würde der reverse-code zu dem, was Sie tun, um es zu drucken (std::cin >> n
davon ausgegangen, dass die Eingabe eine base-10-Zahl, so liest er eine falsche Zahl, wenn der Eingang tatsächlich so gedacht ist, werden in der Basis 2).Ich habe es geschenkt OP will, drucken Sie es in binäre, für die die meisten Empfehlungen ist die Verwendung von bitweisen Operationen zum extrahieren der bits. Das ist natürlich nicht streng meine, es ist gespeichert in base-2, aber stark darauf hin, es.
Interessante Wortklauberei über 2 ergänzen, dass nicht ein reines Basis-system. Es ist noch binäre obwohl, mit base-2 legen Sie Werte bis auf das Vorzeichen-bit. (Ich denke, "binary" ist ein besserer Begriff für die run-time-Darstellung sowieso).
(Und BTW, ISO-C-und C++ erforderlich ist, dass die
unsigned
integer-Typen sind eigentlich Basis 2, mit der bits in normalen Platz-Wert um: Sie wickeln auf modulo 2^n für einige n , wobei n die Anzahl der bits in den Wert-Darstellung, die insbesondere die Größe von integer (N4140 Abschnitt 3.9.1 Grundlegende Arten, Punkt 4). Undunsigned char
hat keine Polsterung: alle Objekt-bits sind mit dem Wert Darstellung bits. (Und Sie kann Stimmen, umchar*
Blick auf die Darstellung von etwas). Trinary hardware zutun haben... Die bits-in-order-req kommt aus der Beschreibung von Veränderungen als tatsächlich shifting bits, nicht*2
InformationsquelleAutor Alexander Gessler
Zwar gibt es keine Funktion zum Lesen von Binär-zahlen direkt, es gibt Funktionen, die
strtox
(wobei x für den Datentyp) umwandeln eine Zeichenkette mit einer binären Zahl (eine Zahl oder jeder anderen Basis) zu einem numerischen Wert.Also die Lösung ist, Lesen Sie zunächst die Zahl als string und dann konvertieren.
Beispiel:
InformationsquelleAutor Klas Lindbäck
eher do it yourself:
InformationsquelleAutor bumfo