C++:带符号64位整数中两个无符号64位整数的差值

Abh*_*bhi 4 c++ unsigned-integer

我试图用C++编写一个函数,它接受两个64位无符号整数,并返回它们在带符号的64位整数中的差异.由于溢出情况,它似乎有点复杂 - 由于输入是两个无符号正整数,如果这两者之间的绝对差值大于最大有符号值(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;
}
Run Code Online (Sandbox Code Playgroud)

bam*_*s53 5

对我来说,这似乎是一个更简单,更易读的实现.

int64_t GetDifference(uint64_t first, uint64_t second) {
    uint64_t abs_diff = (first > second) ? (first - second): (second - first);
    assert(abs_diff<=INT64_MAX);
    return (first > second) ? (int64_t)abs_diff : -(int64_t)abs_diff;
}
Run Code Online (Sandbox Code Playgroud)