位运算学习总结
位运算作用
1. 掩码掩码是某些位设为开(1),而某些位设置为关(0)的位组合
ch &= 0xff; //留下ch的最后8位
2. 打开位
有时需要打开一个值的特定位,同时其他位不变,使用“位或”来实现
ch = ch | 0x01; //打开第一位
3. 关闭位
不影响其它位,关闭特定位,使用“与”
ch = ch & 0xFE; //关闭第一位
4. 转置位把1的变为0,0变为1;使用“异或”ch ^= 0xff; //转置所有位
5.查看一位的值
if( (flag & MASK) == MASK ) { ... ... }
移位运算
<< 左移;>> 右移
提供高效的对2的幂的乘法和除法
例,使用位运算显示二进制数:
char* itobs( int nNumber, char* pReturn ) { static int size = 8 * sizeof(int); for( int i = size - 1 ; i >= 0; i--, nNumber >>= 1) { pReturn[i] = ( 1 & nNumber ) + '0'; } pReturn[size] = '\0'; return pReturn; }
反转最后几位
int invert_end( int nNumber, int nCount) { int mask = 0; int bitmaks = 1; while( nCount-- > 0 ) { mask |= bitmaks; bitmaks <<= 1; } return nNumber^mask; }
位字段
struct segment { unsigned int seg1:1; unsigned int seg2:1; };
指定两个1位字段, seg1和seg2各占1位,整个struct 占4个字节(unsigned int),只用了其中2位(共4*8=32位)。