2017-01-28 4 views
-1

Dies ist eine der Linien I in C# app Überschreibung von WndProc habe:Kann dieser Ausdruck Wurf Ausnahme

int hiWord = unchecked((short)((long)m.LParam >> 16)); 
if (hiWord != 0) 
{ 
    // do something 
} 

Ist es möglich, dass es arithmetische Ausnahme auslösen kann?

Antwort

1

Nein, es werden keine Ausnahmen ausgelöst, aber Sie müssen sich der arithmetischen Details des Rechtsverschiebungsoperators bewusst sein; dass das höchstwertige Vorzeichenbit beibehalten wird (wenn LParam der gesenkte Wert ist) und die Art und Weise, wie der long Wert in short gekürzt wird; die höchsten 48 Ordnungs-Bits werden entfernt und die restlichen 16 Bits werden nur zurückgegeben.

+0

Können Sie erklären, warum Casting kurz zu lang Überlauf erzeugen wird? –

+0

@LeonHavin Es gibt keinen Überlauf im Casting von lang zu kurz, es ist eine Kürzung. Ich habe meine Antwort bearbeitet und den Wortüberlauf entfernt, da ich gerade versucht habe, auf das Vorzeichenbit des Shift Operators '>>' zu zeigen. –