c# 从 int 中获取位作为 int

Twi*_*d89 2 c# bit-manipulation

我需要从具有以下格式的整数中获取 4 个整数

    int1 14 bits
    int2 14 bits
    int3 3 bits
    int4 1 bit
Run Code Online (Sandbox Code Playgroud)

我找到了很多关于从 int 读取单个位的文章,但我找不到任何关于从单个整数读取多个值的内容,因此我们将不胜感激!

I4V*_*I4V 6

假设是从左到右

int int1 = x >> 18;
int int2 = (x >> 4) & 0x3fff;
int int3 = (x >> 1) & 7;
int int4 = x & 1;
Run Code Online (Sandbox Code Playgroud)


AKX*_*AKX 5

因此,让我们假设您的 32 位 int 按位排列如下,您的目标变量是 X、Y、Z 和 W。

31                                0 # bit index
XXXXXXXXXXXXXX YYYYYYYYYYYYYY ZZZ W # arrangement
......14...... ......14...... .3. 1 # bits per variable
............18 .............4 ..1 0 # required right-shift
Run Code Online (Sandbox Code Playgroud)

要获得X,您需要将整数右移 18 位,然后将其屏蔽((1<<14)-1)(即 0x3FFF),等等:

x = (i >> 18) & 0x3FFF
y = (i >> 4) & 0x3FFF
z = (i >> 1) & 7 # ((1<<3)-1) = 7
w = i & 1
Run Code Online (Sandbox Code Playgroud)