【CC++语言入门篇】-- 位运算(二)

2014-11-24 13:01:31 · 作者: · 浏览: 4
,不熟悉的就用计算器算相与后是不是想要的结果。正因为有抛弃,因此16位颜色就没有24位颜色真实。


问题一: 为什么要抛弃低位,不抛弃高位?(比如红色就可以是:r & 0x1f)


上面24位色反过来逆运算获得每一个分量我们已经知道了,那么:

问题二: 怎么获得RGB565颜色color16中的每一个分量。


上面的颜色了解后,我相信大家对于& | << >>这几个该没有什么问题了吧,当然颜色的组合还有其他的,这里不是为了介绍颜色。而是为了了解位运算。

位运算很灵活,这里只是一个基本的介绍。更多的还需要大家多实践。

了解了上面的几个运算符,下面介绍剩下的两个:按位取反和按位异或。

在实际的工作中,通常会有一些状态需要表示。我们这些状态又想节约一点空间。于是我们选择了用一个32位的无符号整数来存放这些状态。比如:

在游戏里面,某个玩家的一些状态也就是我们经常说的BUFF,比如:持续加血,持续加蓝,持续加体力,经脉受伤,被点穴等等。于是我们就有一个枚举:

enum EPLAYER_STATE

{

EPST_NONE = 0x00000000, // 没有状态

EPST_ADDHP = 0x00000001 , // 加血

EPST_ADDMP = 0x00000002, // 加蓝

EPST_ADDSP = 0x00000004, // 加体力

EPST_JMDAM = 0x00000008, // 经脉受伤

EPST_DIANX = 0x00000010, // 被点穴

EPST_XUANY = 0x00000020, // 被眩晕

EPST_ATTCK = 0x00000040, // 被攻击

// .