Как определить переполнение при добавлении подписанного к беззнаковому

Я пытаюсь обнаружить переполнение при добавлении подписанного смещения к беззнаковой позиции

uint32 position;
int32 offset;  // it could be negative
uint32 position = position+offset;

Как я могу проверить, является ли результат переполнением или недостаточным переполнением?

Я подумал о некрасиво, но не уверен в его правильности.

  • переполнение: смещение <0 && положение + смещение> = положение
  • переполнение: смещение> 0 && положение + смещение <= положение

И мне также интересно, есть ли более элегантный способ сделать это.

Обновление:

Какое лучшее решение, если смещение велико?

uint32 position;
long offset;  // it could be negative
uint32 position = position+offset;
9
задан rogerz 4 November 2011 в 01:28
поделиться