我是C开发的新手。我正在尝试了解与Midi应用程序相关的代码片段:
#define GETCMD(p) ((p.data.midi.h& 0x70)>>4)
#define GETCH(p) ((p.data.midi.h& 0x0F)+1)
我假设上面是2个宏。尚不清楚的是十六进制值0x70和0x0F。根据我的理解,第一行的h指针右移4吗?
以下是没有道理的
#define SETCMD_CH(p, c1, c2) p.data.midi.h=0x80|(c2-1)|((c1&7)<<4)
能否请任何人让我理解这三个定义?
提前致谢
GETCMD
从3..6位中提取3个命令位,并将它们作为0..7范围内的值返回。
GETCH
返回4个通道位(从位0..3开始),并以1..16范围内的值返回。
SETCMD_CH
设置上面的命令和通道位,即只是上面两个宏组合的反向操作。
这种按位运算只是获取/设置中的适当位所需的移位和掩码p.data.midi.h
。如果您不清楚这些操作的工作方式,则可能需要阅读按位操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句