c ++中的位操作

时间:2012-01-03 14:17:26

标签: c++ bitwise-operators

我对c ++中的位操作有疑问,

有一组代码:

#define INDEX(SRC, DEST) ((U16)SRC | (DEST << 8))

(U16)SRC | (DEST << 8)意味着什么?

4 个答案:

答案 0 :(得分:4)

  • (U16)SRCSRC转换为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 shortuint16_t的宏。如果你想了解一下,define扩展了什么以包含宏的定义并在一个简单的测试程序中调用宏:

#include "whatever-defines-INDEX.h"

INDEX(10, 1)

然后使用-E选项(或/E选项调用编译器,如果-E不可用且您正在使用Windows):这会将运行预处理器的结果发送到标准输出。