这是正确的uint64_t比较吗?

我正在尝试比较64位数字的3种方式,例如结果必须类似于memcmpstrcmp

我想出了这个,但是我不确定如果我输入一些非常大的数字,它是否可以执行。

汇编看起来不错,但是我担心它是否正确,因为如果我对分支进行编译,编译器将不会生成相同的代码。

https://gcc.godbolt.org/z/UNtPGh

#include <cstdint>
#include <algorithm>

int f(uint64_t a,uint64_t b){
    auto x = std::max(a,b);

    int xa = (x - a) > 0;
    int xb = (x - b) > 0;

    return xb - xa;
}

inline int f1(uint64_t a,uint64_t b){
    return f(b,a);
}

int main(){
    return f(550u,5555u);
}
dianasry 回答:这是正确的uint64_t比较吗?

这似乎是著名的两个参数sgn模板代码的变体,但使用的是max

template<typename T>
constexpr int sgn(T a,T b){
    return (a > b) - (a < b);
}

是的,它适用于uint64_t并产生完全相同的汇编代码。

本文链接:https://www.f2er.com/3137134.html

大家都在问