如果有人能向我解释这里发生了什么

时间:2012-12-03 02:21:03

标签: c++ function stack operators bit-manipulation

在我的程序的某处,我有一个功能

for (int i = 0; i < 4; i++) if (!(mask & 1 << i))

{

   string tmp = s;

   b[i](tmp);

   mask |= 1 << i;

   generate(tmp, mask, count - 1);
}

但是,如果我改变一件事(大概应该是相同的),那么代码就不再那样了。

如果不是

mask |= 1 << i;

generate(tmp, mask, count - 1);

我写generate(tmp, mask | (1 << i), count - 1)

3 个答案:

答案 0 :(得分:3)

这不是一回事。

mask |= 1 << i;

更改变量mask,而您的版本 - mask | (1 << i) - 则不会。

这就像说x += 1x+1的行为不一样 - 当然,表达式的计算结果相同,但x仅对第一个版本进行了更改。

答案 1 :(得分:2)

mask |= 1 << i;

也可以写成:

mask = mask | (1 << i);

在原始代码中,掩码的值为:1, 3, 7, 15。但是,您修改的版本会生成:1, 2, 4, 8。所以你可以改变它:

generate(tmp, mask = mask | (1 << i), count - 1)

具有相同的值

答案 2 :(得分:1)

使用第一个语句在每次迭代时对Mask进行变异。第二个没有突变。因此,语义是不同的,因为mask在每次迭代时都具有相同的值。