0
Console.WriteLine(7 << 4);
Console.WriteLine(7 >> (32 - 4));

何らかの理由で、2番目のメソッドは112ではなく0を返します。ただし、両方が互いに等しくなければならず、両方とも112を返す必要があります。

更新:それは知られてい(x << n) == (x >> (32 - n))ます。

あなたのアイデアは?

4

2 に答える 2

2

ここに何が表示されるかを本当に理解していない:

7 << 4左にシフトしています(乗算のように)7 * (2 ^ 4) = 7 * 16 = 112

一方では

7 >> (32 - 4)は右にシフトしています(除算のように) 。7/(2^28)整数値に変換すると、になり0ます。

問題は、なぜConsole.WriteLineピークが整数の過負荷になるのかということです。これは、整数値に作用するため、結果によって期待されるのはです。CLRint

したがって、結果正しいです。

于 2012-10-27T09:43:08.033 に答える
1
(x << n) == (x >> (32 - n))

これは、実行されている循環シフトである場合にのみ当てはまりますが、C#では当てはまりません。C#では、が最初のビットを過ぎて右にシフトされると、それらのビットは失われます。

//Seven = 00000111
Console.WriteLine(7 >> 1);  //00000011
Console.WriteLine(7 >> 2);  //00000001
Console.WriteLine(7 >> 3);  //00000000
Console.WriteLine(7 >> 4);  //00000000
//.
//.
//.
Console.WriteLine(7 >> 28);  //00000000

ここでより詳細に説明されています: C#で循環ビットシフトを実行する方法はありますか?

于 2012-10-27T10:22:23.537 に答える