0

できれば、これは C# で行うことをお勧めします。

おそらく、私は1024の整数を持っています。これらの方程式を生成できます。

4096  >> 2 = 1024  
65536 >> 6 = 1024
64    << 4 = 1024 

等々...

手がかり、ヒント、ガイド、アイデアはありますか?

編集:わかりました、簡単に言えば、私が欲しいのは、たとえば...ねえ、私はあなたに1024の整数を与えています。今、常に1024の値を返す可能性のあるビットシフト式のリストを教えてください.

わかりました、それをスクラッチします。私の質問はあまり簡潔で明確ではなかったようです。もう一度やってみます。
私が望むのは、数値に基づいて可能なビットシフト方程式のリストを生成することです。たとえば、値が 1024 の場合、常に 1024 の値を返す可能性のある方程式のリストを生成するにはどうすればよいでしょうか?

サンプル方程式:

4096  >> 2 = 1024  
65536 >> 6 = 1024  
64    << 4 = 1024 

同様に、5 を与える追加の方程式をいくつか教えてほしいと頼んだら、次のように答えるでしょう。

3  + 2 = 5  
10 - 5 = 5  
4  + 1 = 5

私はまだ曖昧すぎますか?申し訳ありません。

4

3 に答える 3

0

各方程式を逆にして、可能な方程式を「生成」することができます。

1024 >> 4 == 64 

したがって

64 << 4 == 1024

したがって、変数のオーバーフローまたはアンダーフローによりビットを失うことなく、1024 のすべての右/左シフトを生成し、対応する方程式を逆にします。

于 2011-12-20T10:45:42.303 に答える
0

「>」または「<」を追加するだけです。

uint value1= 4096 >> 2;
uint value2 = 65536 >> 6;
uint value3 = 64 << 4;

http://www.blackwasp.co.uk/CSharpShiftOperators.aspx

于 2011-12-20T10:45:59.217 に答える
0

これらの関係が存在する理由を尋ねていますか? ビットを 1 ビット左にシフトすることは、2 を掛けることと同じ512 << 1 = 512 * 2 = 1024です。右に 1 シフトすることは 2 で割ることです。2 だけシフトすることは 4 を掛ける/割ることです。だから1 << 10 = 1 * 2^10 = 1024。理由を確認するには、数値を 2 進数で書きます。例として 7 を取り上げます。

7 -> 0000 0111b
7 << 1 -> 0000 1110b = 14
7 << 3 -> 0011 1000b = 56

すでにこれらすべてを知っている場合は、申し訳ありませんが、質問を曖昧にしたくない場合があります。

于 2011-12-20T10:55:25.653 に答える