在我的程序的某处,我有一个功能
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)
答案 0 :(得分:3)
这不是一回事。
mask |= 1 << i;
更改变量mask
,而您的版本 - mask | (1 << i)
- 则不会。
这就像说x += 1
和x+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在每次迭代时都具有相同的值。