从c中的整数值中抓取位

时间:2013-03-21 01:09:51

标签: c integer int complexity-theory bits

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

2 个答案:

答案 0 :(得分:3)

int high = temp & (2^10-1);
int middle = (temp >> 10) & (2^10-1);
int low = (temp >> 20) & (2^10-1);

答案 1 :(得分: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;

关于这个解决方案的优点是它非常易读,并且编译器会自动生成位操作以读取每个变量。