Может ли это выражение вызвать исключение

Это одна из строк, которые у меня есть в C# приложении переопределения WndProc:

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

Возможно ли, что оно может бросить арифметическое исключение?

1 ответ

Нет, он не будет генерировать исключения, но вы должны быть полностью осведомлены об арифметических деталях оператора смещения вправо; что бит знака высшего порядка будет сохранен (если LParam это оплаченное значение), и способ long значение будет усечено в short; эти старшие биты 48 порядка будут удалены, а остальные 16 бит будут возвращены только.

Другие вопросы по тегам