仅使用按位运算符(|、&、~、^、>>、<<)和其他基本运算符(如+、-和!),是否可以替换下面的"==“?
int equal(int x, int y) {
return x == y;
}发布于 2010-11-12 12:42:07
如果两个数字之间没有差异,则它们是相等的:
int equal(int x, int y){
return !(x-y);
}发布于 2010-11-12 12:40:44
请记住,XOR与NOT EQUALS完全相同,XNOR与EQUALS完全相同。因此,下面的代码将完全满足您的需求:
return !(x ^ y);发布于 2010-11-12 16:01:32
C !操作符实际上只是!= 0的简写,所以使用它似乎非常接近欺骗:)
下面是我仅使用位操作的观点,假设32位二进制补码机器具有算术右移位(从技术上讲,在C中,右移算术是未定义的,但我在二进制补码机器上见过的每个C编译器都正确地支持这一点):
int t = (x - y) | (y - x); // <0 iff x != y, 0 otherwise
t >>= 31; // -1 iff x != y, 0 otherwise
return 1 + t; // 0 iff x != y, 1 otherwise也就是说,实际的编译器没有这个问题。真正的硬件实际上直接支持比较。具体细节取决于架构,但有两个基本模型:
算术运算返回的
如果(a == b)转到标签;
或
如果(a < b)转到标签;
all in one机器指令。
https://stackoverflow.com/questions/4161656
复制相似问题