看了 c++ primer 关于位操作的章节,记录一些自己的理解.
位操作需要针对 unsigned 类型的数 进行操作.
对 负数进行位操作,会依赖机器不同而结果不同,应该避免.
位操作需要针对 unsigned 类型的数 进行操作,
所以能够操作的位数会受到 这个 unsigned类型的数据的 位数限制.
bitset可以操作任意多位,不收类型的 位数限制.
对比 bitset 和 位操作符 的几个经典的使用情况:
1. 初始化 // initialize as 0
bistset<30> bitset_quiz;
unsigned long int_quiz = 0;
2. 置位 // set the 27 bit as 1
biset_quiz.set(27);
int_quiz |= 1UL << 27;
3.复位 // set the 27 bit as 0
int_quiz &= ~(1UL << 27);
4.取值 // get the value of 27 bit
bool status;
status = bitset_quiz[27];
status = status & (1UL << 27);
上面的位操作例子都是书上的,看的时候觉得挺简单,
但是自己合上书写一遍,还真得稍微动动脑筋.
虽然书上强力推荐使用 bitset 更加简单.
但是我觉得熟练掌握 位操作的思想,应该是每个程序元所必备的.
记得 windows sdk 在绘制背景透明的位图的时候,就需要熟悉这个知识点.