Я пытаюсь написать функцию на С++, которая принимает два 64-битных целых числа без знака и возвращает их разницу в 64-битном целом со знаком. Это кажется немного сложным из-за ситуации с переполнением. Поскольку входные данные представляют собой два положительных целых числа без знака, и если абсолютная разница между ними больше, чем максимальное значение со знаком (INT64_MAX), то разница не может быть передана через целое число со знаком. Итак, я написал следующую реализацию, и мне было интересно, во-первых, правильно ли это функционально, а во-вторых, есть ли более простая реализация. Любые предложения будут ценны. Спасибо! (Я собираюсь заменить assert на исключение, пока оно есть!)
int64_t GetDifference(uint64_t first, uint64_t second) {
uint64_t abs_diff = (first > second) ? (first - second): (second - first);
uint64_t msb_abs_diff = (abs_diff >> (sizeof(abs_diff)*8 - 1)) & 1;
assert(msb_abs_diff == 0);
int64_t diff = first - second;
return diff;
}