我感兴趣的是找到一个布尔/算术函数,如果两个值匹配则返回-1,如果它们不匹配则返回0,换句话说= = operation。我知道这可以用逻辑NOT来完成,例如:
! (A-B)
如果A == B,它将是-1(=二进制中的111111111 ....)但问题是这会编译成一个很大的右移,就像>> 31
那样昂贵。我希望找到可以达到同样效果的短周期二进制指令。
当用作R值时= =编译,与!(A-B)相同?
答案 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等于