文章目录
- 第十一章:位运算符与位运算
- 1.按位与运算:&
- 2.按位或运算:|
- 3.按位异或运算:^
- 4.取反运算符:~
- 5.左移运算符:<<
- 6.右移运算符:>>
- 总结
第十一章:位运算符与位运算
位运算将表达式或变量的值看成二进制数,对于它的每个二进制位逐位进行运算,所以不能用于float、double、long double、void或更复杂的数据类型,即只能用于整型、字符型数据等。
1.按位与运算:&
-
作用:位逻辑与运算,参与运算的两个操作数按二进制位进行逻辑与运算
-
运算规律:全1为1
注意:参与运算的两运算数据先转换成补码形式,再进行位运算
- 用途:
- 清零:找到合适的二进制数,原来的数为1的位,新数中相应的位为0.
- 取一个数中的某些指定位
- 一个short a ,若取高字节,则与0177400进行位与运算,特点:高字节全为1,低字节全为0
- 若取低字节,则与0377进行位与运算,特点:高字节全为0,低字节全为1
2.按位或运算:|
- 作用:将两个操作数对应的每一位分别进行逻辑或操作
- 规律:全0为0
0|0=0,0|1=1,1|0=1,1|1=1
3.按位异或运算:^
- 作用:将两个操作数对应的每一位进行异或操作
- 规则:两个数对应的二进制位__相同为0,相异为1__
0^0=0 0^1=1 1^0=1 1^1=1
-
用途:
- 使特定位翻转:一个数若想使其某些特定位翻转,则与一个数相异或,使该数对应位全为1
若oxfa位翻转 11111010 (^) 00001111 --> 11110101
- 与0相^,保留原值
x0x35^0 00110101 (^)00000000 -->00110101
与0相保留原位,与1相翻转
-
用来清0:一个整数与其自身进行异或运算,结果必为0, a^a=0
-
交换两个值,不用临时变量
a=a^b; b=b^a; a=a^b; a=01 b=10 a=11 b=10 a=11 b=01 (a^b) a=11 (b^a) b=01 (a^b) a=10
4.取反运算符:~
- 作用:用来求表达式或变量的反码
- 运算规律:为单目运算符,将一个二进制数按位取反,即将1变为0,将0变为1
- 应用:增加程序的移植性
eg:
若将一个变量x的低四位清零,对于不同数据的变量应选用不同的操作数,即
对于char x,y 应写作:y=x&0xf0
注意:位运算符除了~外,均为双目运算符,要求两侧各有一个一个运算量
5.左移运算符:<<
-
作用:将一个数的二进制位全部左移若干位
-
左移1相当于该数×2
-
左移高位舍弃0:相当于乘2的n次幂
6.右移运算符:>>
- 作用:将一个数的二进制位全部右移若干位
- 规则: