0

这是我正在尝试做的事情:

我有两个整数

int a = 0; // can be 0 or 1
int b = 3; // can be 0, 1, 2 or 3

我也想拥有

unsigned short c

将变量存储在其中。

例如,如果我将a存储在c中,它将如下所示:

00000000
^ here is a

然后我需要将b存储在c中。它应该如下所示:

011000000
 ^^ here is b.

我也想在写完这些数字后把它们读回来。我怎样才能做到这一点?

感谢您的建议。

4

2 回答 2

3

假设这些是数字的二进制表示,并假设您真的打算在 b 的右侧有五个零

01100000
 ^^ here is b

(你有它的方式 a 和 b 重叠)

那么这是怎么做的

// write a to c
c &= ~(1 << 7);
c |= a << 7;

// write b to c
c &= ~(3 << 5);
c |= b << 5;

// read a from c
a = (c >> 7)&1;

// read b from c
b = (c >> 5)&3;
于 2013-11-11T23:04:24.623 回答
0

您可以使用C++ 位字段来完成此操作:

struct MyBitfield
{
    unsigned short a : 1;
    unsigned short b : 2;
};
MyBitfield c;
c.a = // 0 or 1
c.b = // 0 or 1 or 2 or 3
于 2013-11-11T23:08:16.057 回答