如何使用二进制操作高效执行==?

时间:2014-05-16 17:37:51

标签: c optimization bit-manipulation equality

我感兴趣的是找到一个布尔/算术函数,如果两个值匹配则返回-1,如果它们不匹配则返回0,换句话说= = operation。我知道这可以用逻辑NOT来完成,例如:

! (A-B)

如果A == B,它将是-1(=二进制中的111111111 ....)但问题是这会编译成一个很大的右移,就像>> 31那样昂贵。我希望找到可以达到同样效果的短周期二进制指令。

当用作R值时= =编译,与!(A-B)相同?

1 个答案:

答案 0 :(得分:0)

这会有帮助吗?

#include <stdio.h>

int compare (int a, int b) {
char res[] = { 0, 0, -1};
char *p = &res[2];
return p[(a - b) ^ (b -a)];
}

main() {
 printf("\nans %d \n",  compare(12435, 12435));
 printf("\nans %d \n",  compare(221, 12435));
 printf("\nans %d \n",  compare(-43221, 12435));

}

BTW您可以使用^ b来获得0等于