Может ли это выражение вызвать исключение
Это одна из строк, которые у меня есть в C# приложении переопределения WndProc:
int hiWord = unchecked((short)((long)m.LParam >> 16));
if (hiWord != 0)
{
// do something
}
Возможно ли, что оно может бросить арифметическое исключение?
1 ответ
Нет, он не будет генерировать исключения, но вы должны быть полностью осведомлены об арифметических деталях оператора смещения вправо; что бит знака высшего порядка будет сохранен (если LParam
это оплаченное значение), и способ long
значение будет усечено в short
; эти старшие биты 48 порядка будут удалены, а остальные 16 бит будут возвращены только.