位运算
按位运算符:
- & 按位的与
- | 按位的或
- ~ 按位取反
- ^ 按位的异或
- << 左移
- >> 右移
按位与&:
- 如果(x)==1并且(y)==1,那么(x&y)=1,否则它等于0,即同真则真
- 按位与常用的两种应用:
- 让某一位或某些位为0:x & 0xFE
- 取一个数中的一段:x & 0xFF
按位或|:
- 如果(x)==1或(y)==1,那么(x|y)=1,否则等于0,即有一个为真就为真
- 按位或常用于:
- 使得一位或几个位为1:x | 0x01
- 把两个数拼起来:0x00FF | 0xFF00
按位取反~:
- (~x)=1-(x)
- 把1位变0,0位变1
- 想得到全部为1的数:~0
- 7的二进制是0111,x | 7 使得低3位为1,而x & ~7 ,就使得低3位为0
按位异或^:
- 如果(x)==(y),那么(x^y)=0,否则(x^y)==1
- 如果两个位相等,那么结果为0,不相等,结果为1
- 如果x和y相等,那么x^y的结果为0
- 对一个变量用同一个值异或两次,等于什么也没做
- x^y^->x
左移<<:
- i << j
- i 中所有的位向左移动 j 个位置,而右边填入0
- 所有小于int的类型,移位以int的方式来做,结果是int
- x <<=1 等价于 x *=2,x <<= n等价于x *=2n
右移>>:
- i >> j
- i 中所有的位向右移 j 位
- 所有小于int 的类型,移位以int的方式来做,结果是int
- 对于unsigned的类型,左边填入0
- 对于signed 的类型,左边填入原来的最高位(保持符号不变)
- x >>=1 等价于 x /=2, x >>=n 等价于 x /=2n
注意:
移位的位数不要用负数
位段:
把一个int的若干位组合成一个结构
struct{
unsigned int leading : 3;//冒号后面数字说明leading占据几个比特,下面同理
unsigned int FLAG1 : 1;
unsigned int FLAG2 : 1;
int trailing : 11;
};

浙公网安备 33010602011771号