int64_t foo(int64_t a, int64_t b, int64_t c){
return a == b ? c : a == c ? b : a;
}
是否有任何非分支按位黑客可以实现上述功能?
最佳答案
是的,它们是:
return ((!(a-b))*(c^a))^((!(a-c))*(b^a))^a;
if a=b=c: (1*(c^a))^(1*(b^a))^a = a^b^c= a
if a=b != c: then (1*(c^a))^0^a= c^a^a= c
与a=c != b
相同
if a != b != c: (0*(a^c))^(0*(a^b))^a = 0^0^a=a
这种方式是否更快值得怀疑,但是尝试一下。
UB-警告。
如果 a-b
或 a-c
导致上溢或下溢,则这是未定义的行为。可以使用无符号变量。
关于c - 如果两个相等,否则第一个相等,是否有非分支按位解决方案来确定 "odd one out of 3"数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36378536/