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);
}

ただし、(おそらく)同じものを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);

元のコードでは、 mask の値は次のとおり1, 3, 7, 15です。ただし、変更したバージョンでは次が生成されます: 1, 2, 4, 8. したがって、次のように変更できます。

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

同じ価値観を持つこと

于 2012-12-03T02:25:15.080 に答える
1

マスクは、最初のステートメントで反復ごとに変更されます。2番目には突然変異はありません。結果として、マスクは各反復で同じ値を持つため、セマンティクスが異なります。

于 2012-12-03T02:22:58.527 に答える