一段c语言代码,求详细解释,第三行开始就看不懂了

#define bwMCDR2_ADDRESS 4
#define bsMCDR2_ADDRESS 17
#define bmMCDR2_ADDRESS BIT_MASK
(MCDR2_ADDRESS)
#define BIT_MASK(_bf)(((1U<<(bw##_bf))-1)<<(bs##_bf)
#define SET_BITS(_dst,_bf,_val)\
((_dst)=((_dst)&~(BIT_MASK(_bf)))I(((_val)<<(bs##_bf))&(BIT_MASK(_bf))))
SET_BITS(MCDR2,MCDR2_ADDRESS,RegisterNumber);

就是一些宏定义, 用的时候直接替换
比如 bmMCDR2_ADDRESS 就相当于BIT_MASK(MCDR2_ADDRESS)
把MCDR2_ADDRESS 带入BIT_MASK的宏定义里
就得到(((1U<<(bwMCDR2_ADDRESS))-1)<<(bsMCDR2_ADDRESS)追问

他是实现什么功能啊?怎么实现的?我知道他就是一堆宏定义,来回替换,但是看不懂他移位什么的,是实现什么功能啊 ?能写具体点吗?

追答

#define bwMCDR2_ADDRESS 4 // 这里的MCDR2_ADDRESS是可以自己定义的,
// 后面的数字代表
//宽度
#define bsMCDR2_ADDRESS 17 //同上, 数字代表开始的位数;
#define bmMCDR2_ADDRESS BIT_MASK(MCDR2_ADDRESS)
#define BIT_MASK(_bf)(((1U<<(bw##_bf))-1)<<(bs##_bf)
//上面的两句不太会解释:
//假如宽度就是4, 位数是17
//上面两句话就是得到一个数(二进制)1 1110 0000 0000 0000 0000
#define SET_BITS(_dst,_bf,_val)\((_dst)=((_dst)&~(BIT_MASK(_bf)))I(((_val)<<(bs##_bf))&(BIT_MASK(_bf))))
//如果上面三句都理解了, 那么这就简单了, 假如_dst 的值为1 1010 1010 1010 1010,

//_val的值为0101; 那么你带入就能得到后来_dst的值变为 (0101)0 1010 1010 1010;

//我把前面部分括起来了, 因为那是_val的值; 可能就是这样吧.
哪里有错还请原谅;

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-30
不会吧。。。这是C语言吗。。。。追问

这是c语言。

相似回答
大家正在搜