我正在研究的算法必须经常检查某个任意整数值“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/