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

只需添加一个额外的 '>' 或 '<':

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,n 是 2^n。所以1 << 10 = 1 * 2^10 = 1024。要了解原因,请将数字写成二进制:我们以 7 为例:

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

如果你已经知道这一切,我很抱歉,但你可能想让这个问题不那么含糊。

于 2011-12-20T10:55:25.653 回答
0

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

1024 >> 4 == 64 

因此

64 << 4 == 1024

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

于 2011-12-20T10:45:42.303 回答