-5

C では数値に 1 を加算する必要があります。「+」、「++」などの算術演算子を使用せずにこれを行う必要があります。

次のコード行を書きました。

int a = 1234;
int b = 1;
printf("%d", a ^ b);

これは、整数の制限に達するまで正常に機能します。つまり、32 ビットの場合は 4294967295 です。しかし、他の多くの Web サイトで、同じことを実行するために 2 つの数値の AND を実行し、その後に XOR と左シフトを実行することがわかります。

私はCの初心者なので、私のアプローチが正しいかどうかを提案してください。

4

3 に答える 3

5

あなたのアプローチは正しくありません。+Cで数字を追加するには、次を使用する必要があります。

int a = 1234;
int b = 1;
printf("%d\n", a + b); // Prints 1235

あなたのアプローチについて「これは整数の制限に達するまでうまくいく」と言いますが、あなたは間違っています。aが奇数の場合、^演算の結果は 1 の減算になります。

int a = 1235;
int b = 1;
printf("%d\n", a ^ b); // Prints 1234
printf("%d\n", a + b); // Prints 1236, using the correct operator

ここで、現在使用しているアプローチが奇数に対して正しくないことがわかります。

于 2014-08-05T11:34:35.437 に答える
2

この方法では、正確な加算を行っていません。しかし、それはのように見えます。

   a = 00000000 00000000 00000100 11010010
   b = 00000000 00000000 00000000 00000001
 ------------------------------------------
 a^b = 00000000 00000000 00000100 11010011
 ------------------------------------------
                                         ^ this bit is toggled

たとえば、1234 で XOR 3 を実行しようとすると、1233 として出力されます。XOR 演算のためです。

   a = 00000000 00000000 00000100 11010010
   b = 00000000 00000000 00000000 00000011
 ------------------------------------------
 a^b = 00000000 00000000 00000100 11010001
 ------------------------------------------
                                        ^ here this bit is toggled.

加算に XOR を使用する場合、加算していることを意味するわけではありません。このことを念頭に置いて、必要な操作を行ってください。

于 2014-08-05T11:33:27.983 に答える
0

^XOR 操作を実行するために+使用され、「追加」操作を実行するために使用されます。2 つの数値の合計、ある数値と別の数値の負の値の減算、変数の値をある程度増やすなど、あらゆる種類の
足し算を実行することを強くお勧めします。+

++さらに、単項演算子を使用して、変数の値を正確に「1」増加させることができます。x++は と同等x = x + 1です。

また、+=右側で指定された量だけ変数をインクリメントする演算子も使用できますx += 1

運が良ければ、 などの任意の演算子を選択し<OPER>、 のような式を記述x <OPER> <FREAK OPERAND>して、変数に「1 を追加する」効果を得ることができます。しかし、このアプローチをより複雑な状況 (たとえば、 「add 2」操作)
に一般化するのは難しい場合があります。

于 2014-08-05T11:33:48.987 に答える