我对c ++中的位操作有疑问,
有一组代码:
#define INDEX(SRC, DEST) ((U16)SRC | (DEST << 8))
这(U16)SRC | (DEST << 8)
意味着什么?
答案 0 :(得分:4)
(U16)SRC
将SRC
转换为U16
类型。(DEST << 8)
向左移位8位。|
运算符执行按位OR
。答案 1 :(得分:1)
它会将SRC
转换为U16
类型,并在DEST
左移后移位({8})位置时执行按位OR。
答案 2 :(得分:1)
我猜U16也是代码中的某个宏,它可能指定一个16位无符号整数类型(我从缩写中推导出来)。 SRC和DST是代码定义的宏扩展和(U16)SRC |的两个参数(DEST&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&b;可能代码依赖于SRC和DEST都是8位值,并且该代码创建了一个位掩码,这是将8位DEST附加到SRC的8位的结果。
例如,如果(二进制)DEST为10010101且SRC为00001111,则结果为1001010100001111。
答案 3 :(得分:0)
使用您展示的代码需要进行大量猜测:当然,U16
似乎是unsigned short
或uint16_t
的宏。如果你想了解一下,define扩展了什么以包含宏的定义并在一个简单的测试程序中调用宏:
#include "whatever-defines-INDEX.h"
INDEX(10, 1)
然后使用-E
选项(或/E
选项调用编译器,如果-E
不可用且您正在使用Windows):这会将运行预处理器的结果发送到标准输出。