C语言位运算
·
1.概述
| 位运算符 | 含义 | 运算规则 |
|---|---|---|
| & | 与 | 两位同为1得1,有0得0 |
| | | 或 | 两位同为0得0,有1得1 |
| ^ | 异或 | 两位相同为0,不同为1 |
| ~ | 取反 | 0变1,1变0 |
| << | 左移 | 每个二进制位都左移若干位 a<<n,高位丢弃,低位补0 |
| >> | 右移 | 每个二进制位都右移若干位a>>n,无符号数高位补0,有符号数有的补0有的补符号位 |
比如在c语言中,long占4个字节,int占2两个字节,如果一个long类型数据和一个int类型数据进行与运算,则右端对齐,左侧补位方式有三种:
- 若整型数据为正数或者无符号数,左边补16个0
- 若为负数,补16个1
2.使用
(1)与运算&
- 清零操作:令要清零得单元和该为为0的数值相与,比如二进制表示5为101,若要将最右侧1清零,可以与110相与,得100。
- 取该数的指定几位:和清零操作类似,使用了与1不变,与0为0的特性
- 判断奇偶:用if((a&1)==0)代替if(a%2==0)
(2)或运算|
- 将一个数据的某些位置设为1
(3)异或运算^
性质:
- 交换律
- 结合律
- 对任何数x,有x^x=0, x^0=x
- 自反性
用途:
- 翻转指定位置
- 与0相异或值不变
- 交换两个数
(4)取反~
- 令一个数的某位为0
更多推荐
所有评论(0)