奇怪的运营商" | ="

时间:2011-05-18 10:50:46

标签: c++ c operators

我对编码比较陌生,无论如何我在复制iphone像素技术的教程时遇到了这个if语句,无论如何我不确定它在做什么,所以如果有人能为我解释它会很棒感谢。

for(int j = 0; j < (width * height); j++ ) 
{
    if ( pixels[j] & 0xff000000 )  
    {
        collisionMap[j] |= 1;
    }
}

令我困惑的部分是'| ='和单曲'&amp;'标志。这里发生了什么?感谢

4 个答案:

答案 0 :(得分:6)

&安培;是bitwise AND.

| =是bitwise OR,并将值分配给collisionMap[j]

答案 1 :(得分:4)

他们被称为bitwise operators

collisionMap[j] |= 1相当于collisionMap[j] = collisionMap[j] | 1

这将确保设置collisionMap[j]的LSB

答案 2 :(得分:1)

|=对任一方的值执行按位OR(考虑优先级),将结果放入左侧变量。因此,a |= ba = a | b相同(假设没有C ++运算符重载)。更具体地说,说:

a is 01010000 binary, and
b is 10011001 binary, then after `a |= b`...
a is 11011001.

&执行按位AND,产生的值只包含两侧值的位。

答案 3 :(得分:0)

单身&amp;按位执行,而|=运算符执行按位或。