C语言位运算及其应用
categories:
- C语言
位运算符
位运算符允许对一个字节或更大的数据单位中独立的位做处理:可以清除、设定,或者倒置任何位或多个位。也可以将一个整数的位模式(bit pattern)向右或向左移动,针对的是二进制。
)
注意:<<左移运算符最右边补0,>>右移运算符最左边补符号位,(记忆这两个符号方法:箭头朝哪一边就是哪一边移)
位运算应用
下面数据x设为1字节,即8位
去掉最后一位 : (101101->10110) 算法 x >> 1
在最后加一个0:(101101->1011010) 算法 x << 1
在最后加一个1:(101101->1011011) 算法 (x << 1)|1
把最后一位变成1: (101100->101101) 算法 x | 1
把最后一位变成0:(101101->101100) 算法 (x | 1)-1
最后一位取反:(101101->101100) 算法 x ^ 1
把右数第k位变成1:(101001->101101,k=3) 算法 x | (1 << (k-1))
把右数第k位变成0: (101101->101001,k=3) 算法 x & ~(1 << (k-1))
右数第k位取反: (101001->101101,k=3) 算法 x ^ (1 << (k-1))
取末三位: (1101101->101) 算法 x & 7
注:7的二进制为0000 0111,x&7即可取末三位
取末k位: (1101101->1101,k=4) 算法 x & ((1 << k)-1)
取右数第k位: (1101101->1,k=4) 算法 (x >> (k-1)) & 1
位运算方法总结
1.确定符号,变1:|1;变0:&0;取反:^1
2.确定数字
3.构造数字
例如:
例题:统计一个字节数据二进制1的个数