我正在研究的算法必须经常检查某个任意整数值“x”是否小于、大于或等于另一个任意整数值“y”我用的语言是C。
一个简单的方法是使用if-then-else分支来检查这一点,但这并不能以最佳方式工作,因为处理器的分支预测器会出错我只想用算术/逻辑运算和按位运算来实现这种比较,但说实话,我的大脑现在卡住了。
我将调用函数f(x,y)如果xy,则函数返回3。
我的一个想法是评估:

x = 3 * (x > y)

当x>y时返回3,否则返回0如果x==0使用一些按位运算符和条件x==y或x最后,我正在寻找任何函数f(x,y),它将以尽可能少的操作次数给出我的结果,无论是否有位黑客;它只需要快速因此,如果你有任何其他的想法,我可能没有考虑,指出我的另一个解决方案,也非常感谢。

最佳答案

下面的表达式可以满足您的要求。

1 + (x >= y) + (x > y)

在x86-64上:
compare(int, int):
    xorl    %edx, %edx
    cmpl    %esi, %edi
    setg    %al
    setge   %dl
    movzbl  %al, %eax
    leal    1(%rdx,%rax), %eax
    ret

手臂上:
compare(int, int):
    cmp r0, r1
    ite lt
    movlt   r0, #1
    movge   r0, #2
    it  gt
    addgt   r0, r0, #1
    bx  lr

关于c - Bithacks:确定值是小于,大于还是等于某个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32170288/

10-12 23:33