Ich lerne gerade über Binär und Bytes. Ich verstehe, dass 8 Bits ein Byte bilden und dass ein Byte 256 Möglichkeiten haben kann. Die Sache, über die ich verwirrt bin, ist diese:
%Vor%Was 85 oder irgendeine der obigen Zahlen mit binär zu tun haben. Da ist einfach etwas, das mir nicht ganz in den Sinn kommt.
Binär ist, wie Dinge im Computer gespeichert werden. Ones und Nullen, ein und aus, wahr und falsch, die Anwesenheit oder Abwesenheit eines elektrischen Stromes. Dieser Wikipedia-Artikel gibt eine ziemlich gründliche Behandlung.
Eine Darstellung wie "85" in Ihrem Beispiel ist, wie ein Byte formatiert für unsere Bequemlichkeit als menschliche Leser ist. Er könnte in Hexadezimal (Basis 16) als "55", in Oktal (Basis 8) als "125" in Binär als "1010101" oder sogar als "11" in Basis-84 formatiert werden, wenn Sie so geneigt waren. Alle meinen das Gleiche.
85 ist einfach eine Dezimal- (d. h. "Basis 10") Positionsnotation einer Zahl. Es bedeutet:
8 * 10 ^ 1 + 5 * 10 ^ 0
= 8 * 10 + 5 * 1
= 80 + 5
= 85
Sie können jedoch eine beliebige Basis zur Darstellung von Zahlen wählen. Wir Menschen haben 10 Finger, was der wahrscheinliche Ursprung des "Basis 10" -Systems im täglichen Gebrauch ist, aber es gibt keine Möglichkeit, 10 verschiedene Ziffern in der physischen Schaltung des Computers darzustellen. Diese Schaltung versteht nur das Fehlen von Elektronen gegenüber der Anwesenheit von Elektronen - d. H. Nur zwei Ziffern, daher binäres System.
Obwohl Sie im Quellcode des Programms dezimal 85 schreiben können (um es für Menschen natürlicher zu halten), wird es letztendlich innerhalb des Computers als Binärzahl 1010101 dargestellt, die gleich ...
ist1 * 2 ^ 6 + 0 * 2 ^ 5 + 1 * 2 ^ 4 + 0 * 2 ^ 3 + 1 * 2 ^ 2 + 0 * 2 ^ 1 + 1 * 2 ^ 0
= 1 * 64 + 0 * 32 + 1 * 16 + 0 * 8 + 1 * 4 + 0 * 2 + 1 * 1
= 64 + 16 + 4 + 1
= 85
BTW, das Dezimalsystem "richtet" sich nicht mit dem Binärwert aus - eine einzelne Dezimalziffer kann nicht durch eine "ganze" Anzahl von Binärziffern dargestellt werden, und runde Dezimalziffern stimmen nicht gut mit den runden Binärziffern überein. Zum Beispiel:
Manchmal ist es sinnvoll, ein numerisches System zu verwenden, das mit binär "ausgerichtet" wird, z. B. oktal (ein oktale Ziffer ist genau 3 Binärstellen) oder hexadezimal (eine hexadezimale Ziffer ist genau 4 Binärziffern).
Der wichtige Punkt ist, dass all diese Systeme schließlich als binär im Computer dargestellt werden.
Nebenbei bemerkt: "hexadezimal" war früher " sexa -dezimal", aber offenbar beleidigte es einige puritanische Empfindlichkeiten;)
Ein Byte in C # ist nur ein 8-Bit-Ganzzahlwert Im obigen Beispiel stellen Sie 4 Zahlen in einem Array dar - das ist wirklich nicht anders als bei Verwendung von int, außer dass die Zahlen 1/4 des gesamten Speicherplatzes belegen.
Es hat eigentlich nichts mit "binär" zu tun - außer dass es die gebräuchlichste Darstellung für binäre Daten ist. Dies liegt daran, dass die meisten Systeme zu einem Zeitpunkt über ein "Byte" verfügen, was ein 8-Bit-Datenblock ist. Daher ist ein Byte eine gängige Methode zur Darstellung dieser Daten, wenn Sie etwas tun, das mit rohen Binärinformationen arbeitet.
Die BitConverter -Klasse verfügt über Routinen zum Wechseln von Byte-Arrays zu anderen Typen und zurück . Zum Beispiel kann es 4 Bytes nehmen und es in einen Int32 Wert umwandeln Geh in die andere Richtung. Denken Sie daran - alle gespeicherten Daten sind nur Speicher - Sie speichern nur eine Folge von Bits (1 und 0) in einer bestimmten Reihenfolge, und das System interpretiert diese Daten auf eine bestimmte Art.
Das sind nur Zahlen. Sie haben nichts mit Binär an sich zu tun. Sie können sie jedoch in Binärform schreiben, wenn Sie dies wünschen - z. B. 75 = 01001011 in Basis 2.
A byte
ist hier nur ein Datentyp, der einen von 256 möglichen Werten enthalten kann. Typischerweise wird dies entweder als eine Zahl von 0 bis 255 oder als 8 Binärziffern (dh 8 EIN / AUS-Werte) interpretiert. Dies sind nur zwei Möglichkeiten, um das gleiche zu sehen.
Diese Anweisung deklariert ein Array von Bytes und weist ihr 4 Elemente zu, von denen jedes ein einzelnes (theoretisch!) Byte ist. Die tatsächlichen Werte - 85, 86, 67, 75 -, die in diesem Array gespeichert sind, sind jeweils Werte, die in ein einzelnes Byte passen können. In Ihrem Codebeispiel werden diese Werte in dezimaler Form dargestellt. Sobald Ihr Code in ausführbare Form übersetzt wurde, werden diese Werte schließlich von Ihrem Computer in ihren binären Darstellungen gesehen, von Register zu Register übertragen, gedrängt, gepoppt und angesammelt, usw.
Sie könnten Werte in anderen Basen innerhalb Ihrer Quelle darstellen - hexadezimal oder beispielsweise Basis 16, die näher am Metall als am Dezimalsystem liegt und dementsprechend Ihren Denkprozess leicht zwischen Menschen verschieben lässt Darstellung und was dein Code eigentlich sagt, da es praktisch keine Mathematik gibt, um zwischen Hex und Binär zu gehen; Ein anderes gutes Beispiel ist Octal.
Oder Sie können es sich so vorstellen: Stellen Sie Werte innerhalb Ihres Codes dar, indem Sie die Basis verwenden, die sich am besten auf das bezieht, was Sie tun. Wenn Sie Berechtigungen oder Farbwerte zusammenfügen, Hex oder Oktal; Wenn Sie Zinsen auf ein Girokonto berechnen, ist die offensichtliche Wahl dezimal.
Nun zu Ihrem speziellen Code-Snippet - wenn Sie mit einzelnen Zeichen zu tun haben oder rohe Sachen an ein Block-Gerät schreiben, könnte ein Array von Bytes einfach in Ordnung sein - aber wenn Sie eins mit Ihrem Compiler werden, kann Ihr Gehirn Betrachten Sie hex die einfachere Darstellung.
Jede der Zahlen im Array ist kleiner als 256. Sie werden in ein binäres Byte konvertiert. Dies ist nur ihre Dezimaldarstellung.