将int设置为特定位

时间:2015-10-06 00:08:35

标签: c bit-manipulation bit

这可能有点奇怪,但这是我遇到的问题。

我有这样的结构:

typedef struct smallStruct{
    unsigned int First10 : 10;
    unsigned int Next10 : 10;
    unsigned int Third10 : 10;
    unsigned int extra : 1;
} small

我需要能够传入一个int并设置它以使它适合First10的10位,然后是Next10的另一个int,等等。之所以如此,是因为我需要能够在4字节变量中存储4条不同的信息,这是我能想到的最有效的方法。

我需要为此进行一点移位吗?

1 个答案:

答案 0 :(得分:2)

您可以简单地指定值;位域逻辑负责必要的修改:

small make_small(int a, int b, int c) {
  small result = { a, b, c, 0 };
  return result;
}

void update_first(int value, small * s) {
  s->First10 = value;
}

// etc.