分类: C/C++
2008-08-02 19:09:54
位运算
1. 按位异或运算符^的作用
(1) 使特定位反转:与***11**11***异或;
(2) 保留原值:与0异或;
(3) 不使用临时变量,交换两个值:a=a^b; b=b^a; a=a^b;
2. 取反运算符
取反运算符是对二进制数按位取反;
对一个整数a的最后一位取反,考虑程序的移植性(16位,32位):a=a&~1;
~运算符的优先级最高;
3. 左移运算符<<
右补0,高位移出后舍弃;
当左移溢出舍弃的高位不包含1时,左移一位《=》*2
左移运算比乘法运算要快很多
4. 右移运算符>>
右移时要注意符号位的问题:逻辑右移补0,算术右移补符号位;
位运算举例:
1. 取一个整数a从右端开始的4-7位
使a右移4位,设置一个低4位为1其余为0的数,两者位与:
(a>>4)&(~(~0<<4))
2. 循环右移n位
a的右端n位放到b的高n位中:b=a<<(16-n)
a右移n位,左面高n位补0:c=a>>n
c=c|b
位段
以bit为单位存储信息的机制,是一种结构体,其中的成员称为“位段”或“位域”。
位段成员的类型必须为unsigned或int
若某一位段要从另一个字开始存放,可采用以下定义方式:
Unsigned a:1;
Unsigned b:2;
Unsigned :0;
Unsigned c:3; (另一存储单元)
一个位段必须在同一存储单元中,如果第一个单元不能容纳一个位段,则该空间不用,从下一个单元开始存放该位段;
位段在数值表达式中被系统自动转换为整型数使用。