1

在我的程序的某个地方我有一个功能

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)

4

3 回答 3

3

这不是一回事。

mask |= 1 << i;

改变变量mask,而你的版本 - mask | (1 << i)- 没有。

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

于 2012-12-03T02:23:04.643 回答
2
mask |= 1 << i;

也可以写成:

mask = mask | (1 << i);

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

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

具有相同的值

于 2012-12-03T02:25:15.080 回答
1

使用第一条语句在每次迭代中改变掩码。第二个没有突变。结果语义是不同的,因为掩码在每次迭代中具有相同的值。

于 2012-12-03T02:22:58.527 回答