如何生成位移方程?

时间:2011-12-20 10:42:30

标签: c# math bit-manipulation equations

最好在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

我还是太模糊了吗?我为此道歉。

3 个答案:

答案 0 :(得分:0)

您可以反转每个等式,从而“生成”可能的等式:

1024 >> 4 == 64 

因此

64 << 4 == 1024

因此,产生1024的所有右/左移位而不会因变量的上溢或下溢而丢失位,然后反转相应的等式。

答案 1 :(得分:0)

只需添加额外的'&gt;'或'&lt;':

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

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

答案 2 :(得分:0)

你问为什么存在这些关系?向左移位1位相当于乘以2.所以512 << 1 = 512 * 2 = 1024。向右移动1除以2.移位2乘以/除以4,n为2 ^ n。所以1 << 10 = 1 * 2^10 = 1024。要查明原因,请用二进制编写数字:让我们以7为例:

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

如果你已经知道这一切,我道歉,但你可能想让问题变得不那么模糊。