Kann jemand erklären, was passiert, wenn ein Wert an ein Byte übergeben wird, wenn er außerhalb des Bereichs von min / max Byte liegt? Es scheint, den Integer-Wert zu nehmen und modulo es mit 255 zu modulieren. Ich versuche den Grund dafür zu verstehen, warum dies keine Ausnahme auslöst.
%Vor%5000 wird als 4 Bytes (int) dargestellt (hexadezimal)
Jetzt, wenn Sie es in Byte konvertieren, dauert es nur das letzte 1-Byte.
Grund: Auf der IL-Ebene conv.u1 Der Operator wird verwendet, der die Bits höherer Ordnung abschneidet, wenn ein Überlauf bei der Konvertierung von int in Byte auftritt. (Siehe Abschnitt Anmerkungen in der conv.u1 Dokumentation).
ist 136 in dezimaler Darstellung
Was passiert, ist, dass das System die höchstwertigen Bytes fallen lässt, damit es passt. Schau dir diese StackOverFlow-Antwort an eine ziemlich gute Erklärung für das, was vor sich geht.
Ich versuche den Grund dafür zu verstehen, warum dies keine Ausnahme auslöst.
Weil die Standardeinstellung für die Überlaufprüfung off ist.
Versuchen Sie dies, es wird werfen:
%Vor%Die kurze Form ist:
%Vor%Es wird auch in MSDN erklärt. Verwenden Sie checked () , um eine Ausnahme auszulösen, wenn ein Überlauf auftritt. Lesen Sie auch dies: MSDN: Kapitel 5: Weitere Informationen zu Variablen