Casting nach Byte in C # [Duplikat]

8

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%     
Stealth Rabbi 24.09.2012, 21:08
quelle

5 Antworten

7

5000 wird als 4 Bytes (int) dargestellt (hexadezimal)

| 00 | 00 | 13 | 88 |

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).

| 88 |

ist 136 in dezimaler Darstellung

    
prashanth 24.09.2012, 21:20
quelle
4

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.

    
Icemanind 24.09.2012 21:12
quelle
3
  

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%     
Henk Holterman 24.09.2012 21:17
quelle
1

Sie erhalten 5000%256 = 136 , wie immer mit overfull.

    
KAction 24.09.2012 21:12
quelle
0

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

    
Eiver 24.09.2012 21:16
quelle

Tags und Links