我得到一个名为temp的整数,它是复杂的,由3个高,低和电流温度组成。我需要抓住0-9位为高,中间10-19为低,20-29为当前温度,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;
关于这个解决方案的优点是它非常易读,并且编译器会自动生成位操作以读取每个变量。