好的,让我们从一个 32 位整数开始:
int big = 536855551; // 00011111111111111100001111111111
现在,我想将最后 10 位设置为这个整数:
int little = 69; // 0001101001
所以,我的方法是这样的:
big = (big & 4294966272) & (little)
哪里4294966272
是前 22 位,或11111111111111111111110000000000
.
但是当然这不被支持,因为4294966272
它超出int
了0x7FFFFFFF
. 此外,这不会是我唯一的操作。我还需要能够设置位 11 到 14。我的方法(有同样的问题)是:
big = (big & 4294951935) | (little << 10)
因此,有了解释,这就是我正在做的替代上述内容的方法:
1: ((big >> 10) << 10) | (little)
2: (big & 1023) | ((big >> 14) << 14) | (little << 10)
我不觉得我的替代方案是我能走的最好、最有效的方式。有没有更好的方法来做到这一点?
旁注:如果 C# 支持二进制文字'0b'
,这将更漂亮。
谢谢。