-4

我得到一个名为 temp 的整数,它很复杂,由 3 个温度高、低和电流组成。我需要抓取 0-9 位作为高位,中间 10-19 位代表低位,20-29 位代表当前温度,其中 2 位代表错误。我不知道该怎么做,但我知道它涉及按位运算符。

4

2 回答 2

3
int high = temp & (2^10-1);
int middle = (temp >> 10) & (2^10-1);
int low = (temp >> 20) & (2^10-1);
于 2013-03-21T01:13:43.527 回答
0

您可以执行按位运算,或者您可以创建一个包含您的数据类型和具有指定模式的位字段的联合。然后您所要做的就是将您的数据类型添加到联合中并从位域数据类型中读出位。

注意位域可能不可移植。

union helper
{
    struct
    {
          int low : 10;
          int current : 10;
          int high : 10;
          int error : 2;
     };
     int temp;
};

用法:

Helper h;
h.temp = input;
int low = h.low;
int current = h.current;
int high = h.high;
int error = h.error;

这个解决方案的优点是它的可读性很强,编译器会自动生成位操作来读取每个变量。

于 2013-03-21T01:13:23.090 回答