按位运算符非常有趣所以我试图找出一种方法来产生相反的效果,或者不是xor的效果。
如果我有两个字符(8位):
char1 char2
===== =====
1010 1000
after transformation
1000 1000
如果0010
是我要将char1和char2转移到该注册商处禁用的值(位置1)
我该怎么做?
or
仅在1和1时设置1,而xor
仅在1和0或0和1时交换值
答案 0 :(得分:7)
或的反面是而不是。您可以使用或设置位,使用和 - 清除位。
#include <assert.h>
int main() {
int a = 16, b, c;
// Set bit 3
b = a | 1<<3; // OR
assert(b == (8+16));
// Clear bit 3
c = b & ~(1<<3); // AND-NOT
assert(c == 16);
}
答案 1 :(得分:3)
我相信你想要& (and)
:
1100 & 1010 = 1000
它经常与反转一起使用,将特定位设置为0。
1100 & ~0100 = 1100 & 1011 = 1000