好了,讓我們用一個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 –