c++ - 这是正确的 uint64_t 比较吗?

标签 c++ compare

<分区>

我正在尝试用 3 种方式比较 64 位数字,e.d.结果必须类似于 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);
}

最佳答案

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

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

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

关于c++ - 这是正确的 uint64_t 比较吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58768702/

相关文章:

java - 我如何比较Java中的2个方法?

c++ - 访问属性表中的控件

c++ - 在制作(Qt 等)GUI 时声明对象

c++ - 创建动态集合错误

c++ - 如果取消引用 NULL 指针是一件无效的事情,那么应该如何实现自动指针?

sql - 数据库比较工具

compare - 比较 Mac OS X 行内变化的 diff

python - 如何在Python中复制数据

scala - 如何在数学上比较 Scala 中的两种未知类型?

c++ - 将 stdout/stderr 重定向到 null vs2017 c++