c#从int获取int作为int

时间:2013-06-06 10:57:37

标签: c# bit-manipulation

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

    int1 14 bits
    int2 14 bits
    int3 3 bits
    int4 1 bit

我发现很多文章都是从int中读取单个位但是我从单个整数中读取多个值时找不到任何内容,所以请帮助我们!

3 个答案:

答案 0 :(得分:4)

假设是从左到右

int int1 = x >> 18;
int int2 = (x >> 4) & 0x3fff;
int int3 = (x >> 1) & 7;
int int4 = x & 1;

答案 1 :(得分:2)

您可以按位使用并获取此信息:

int source = somevalue;

int int1 = 16383&somevalue;
int int2 = 268419072&somevalue;
int int3 = 1879048192&somevalue;

答案 2 :(得分:2)

所以让我们假设你的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

要获得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