如何从数字中提取某些位并将它们放入新变量中?

时间:2015-11-02 17:21:49

标签: c byte bitwise-operators bits

所以今天我参加了考试,我需要编写一些程序,其中一项任务对我来说真的很难:

unsigned char msg_to_opmag (unsigned short msg);

int main()
{
   short msg = 0x08CF //0x08CF = 1000 1100 1111
   msg_to_opmag(msg);
}

我需要编写一个提取粗体位的函数(1 0001 1 001 111),这样就是00001001(char有8位)

此示例中的输出为:

  

十六进制数:0x08CF在被提取后变为0x09。

我的问题是如何编写此功能?

1 个答案:

答案 0 :(得分:0)

所有这些都与位掩码和位移有关。

示例:

#include <stdio.h>

#define MASKA 0x038 // 0000 0011 1000
#define MASKB 0x780 // 0111 1000 0000
#define SHIFTA 3    //        XX X-->
#define SHIFTB 4    // 0XXX X--- >

int main()
{
   short msg = 0x08CF;
   short msg2 = ((msg & MASKA) >> SHIFTA) | ((msg & MASKB) >> SHIFTB);

   printf("0x%04x -> 0x%02x\n", msg, msg2);
}

输出:

0x08cf -> 0x09