windows游戏编程的高级DirectDraw的应用高彩模式

windows游戏编程的高级DirectDraw的使用高彩模式
已经知道RGB色彩的编码格式,通过简单的移位和掩码操作来完成建立它们。算法如下的宏:
//this builds a 16 bit color value in 5.5.5 format(1-bit alpha mode)
#define _RGB16BIT555(r,g,b)  ((b&31)+((g&31)<<5)+((r&31)<<10))
#define _RGB16BIT565(r,g,b)  ((b&31)+((g&63)<<5)+((r&31)<<11))

这个宏的含义是什么意思?也就是((b&31)+((g&31)<<5)+((r&31)<<10))是什么意思?
Windows 游戏编程

------解决方案--------------------
((b&31)+((g&31)<<5)+((r&31)<<10))

因为31 = 11111b,所以b&31执行一个“与”操作,也就是取b的右5位。
g&31同理,(g&31)<<5就是值再左移5位,((r&31)<<10))同理。

总体来看,若令最终的结果是x,然后把x的二进制位从右到左依次编号为0,1,2,...,那么x的0-4位取的是b的0-4位,x的5-9位取的是g的0-4位,x的10-14位取的是r的0-4位。
------解决方案--------------------
实际上就是拉伸合成16位增强色