异或运算符?

时间:2018-12-02 10:55:12

标签: c arrays xor

我们在讲座中还没有做到这一点,我正在尝试找出如何用一个(或)替代单个异或订单。 有人可以告诉我该怎么做吗?

(完整代码显示用#书写的“ LED-DISPLAY”)

void toggle_pixel_v2(unsigned int pixel_number, void *adr) {
char *pc = (char *)adr;
int ioff = (pixel_number-1) / 8;
int ibit = (pixel_number-1) % 8;
if ( pc[ioff] & (1<<ibit) ) pc[ioff] &= ~(1<<ibit);
else pc[ioff] |= (1<<ibit);

}

1 个答案:

答案 0 :(得分:0)

ab中位置A的位。
A &= ~(1<<b)清除aA |= (1<<b)设置了a。这两个操作都使A的其余部分保持不变,因为x & 1 = xx | 0 = x

使用A = pc[ioff]b = ibit,您的代码将清除a(如果已设置),并清除未设置的代码。这是异或结果的结果:由于在(1<<b)中仅设置了位置b的位,因此A ^ (1<<b)的结果为A,其中a切换(因为x ^ 1 = ~xx ^ 0 = x)。

因此以下两个代码是等效的:

if (A & (1<<b))
    A &= ~(1<<b);
else
    A |= (1<<b);

A ^= (1<<b);