位操作存取RGB颜色值的方法

分享一个位操作存取RGB颜色值的方法。

缘由

我需要在数据库里面存储rgb颜色,但是直接存字符串这样太low了,于是想办法 将rgb颜色经过位运算得到24位的int值,储存在mysql里面可以直接用medium int类型,很节省空间。(当然,c语言并没有24位类型,只有32位的无符号整数,在前面补8位0就ok啦,在我php中就不存在这个现象啦,哈哈)

RGB三种颜色混合成一个整型操作

R:255 24位二进制表示,0000 0000 0000 0000 1111 1111

G:255 24位二进制表示, 0000 0000 0000 0000 1111 1111

B:255 24位二进制表示, 0000 0000 0000 0000 1111 1111

将这rgb三个值经过位运算,(R<<16)|(G<<8)|B,结果如下

1111 1111 1111 1111 1111 1111

(更多…)

c语言的位操作

一、基本位操作

|

&

~

取反

^

异或

<<

左移

>>

右移

二、位操作的常见用法

1.获取某位的值

#define BitGet(Number,pos) ((Number)|= 1<<(pos)) //把某位置1
#define BitGet(Number,pos) ((Number) &= ~(1<<(pos)) //把某位置0
#define BitGet(Number,pos) ((Number) >> (pos)&1)) //用宏得到某数的某位
#define BitGet(Number,pos) ((Number) ^= 1<<(pos)) //把Number的POS位取反

(更多…)