好了,让我们用一个32位整数开始:位操作
int big = 536855551; // 00011111111111111100001111111111
现在,我想这个整数中的最后10位为:
int little = 69; // 0001101001
所以,我的做法是这样的:
big = (big & 4294966272) & (little)
其中4294966272
是第22位,或11111111111111111111110000000000
。
但当然这不支持,因为4294966272
不在int
范围0x7FFFFFFF
之内。另外,这不会是我唯一的操作。我还需要能够通过14中的位11我的方法为(同样的问题)是:
big = (big & 4294951935) | (little << 10)
与解释的方式进行
所以,这里是我什么作为做替代对上面:
1: ((big >> 10) << 10) | (little)
2: (big & 1023) | ((big >> 14) << 14) | (little << 10)
我不觉得像我替代的是最好的,有效的方式,我可以走了。有没有更好的方法来做到这一点?
旁注:如果C#支持二进制文字,'0b'
,这将会更漂亮。
谢谢。
使用BigInteger .....? –
@MitchWheat我从来没有想过......你能给我示例一个例子(最好是作为一个答案,所以如果它的工作,我可以接受它),这将反映我上面的例子? –
https://msdn.microsoft.com/en-us/library/system.numerics.biginteger_operators(v=vs.110)。aspx –