2つの64ビット符号なし整数を受け取り、それらの差を符号付き64ビット整数で返す関数をC++で作成しようとしています。オーバーフローの状況のため、少し複雑に見えます-入力は2つの符号なし正の整数であるため、これら2つの絶対差が最大符号付き値(INT64_MAX)より大きい場合、差は符号付き整数を介して送信できません。そこで、次の実装を作成しました。まず、これが機能的に正しいかどうか、次に、より単純な実装があるかどうか疑問に思いました。任意の提案をいただければ幸いです。ありがとう!(アサーションを例外に置き換えます。今のところあります!)
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;
}