一、位运算符和位运算
1、& 按位与 ~ 取反 | 按位或 << 左移 >> 右移 ^ 按位异或
2、注意:
a. 位运算符中除 ~ 以外,均为二目运算符,即要求两侧各有一个运算量
b. 运算量只能是整型或字符型的数据,不能为实型数据
3、“按位与”运算符 &
(1)含义:参加运算的两个数据,按二进制位进行 “与” 运算
(2)如果两个相应的二进制位都位1,则该位的结果值位1,否则为0 例:0 & 0 = 0 0 & 1 = 0 1 & 0 = 0 1 & 1 = 1
(3)注意:3 & 5 不等于 8,应为 0 1 1 (3)
1 0 1 (5)
0 0 1 (1)
如果参加运算的是负数,则要以补码形式表示为二进制数
(4)按位与运算的用途
a. 清零
若想对一个储存单元清零,即使其全部二进制位为0,只要找一个二进制数,其中各个位符合一下条件:原来的数中位1的位,新数中相应位为0, 然后使二者进行 & 运算
例:要求 将二进制数 11100101 的第2位清零 11100101
& 11100001
11100001
b. 取一个数中某些指定位
例:对一个字型数据取出其低 8 位的值 11010101 01011011
& 0000000 111111111
0000000 01011011
4、“按位或”运算符 |
含义:两个相应的二进制位中只要有一个为1,该位的结果值位1 例:0 | 0 = 0 0 | 1 = 1 1 | 0 = 1 1 | 1 = 1
5、“异或”运算符 ^ (可以逆运算)
(1)含义:参加运算的两个二进制位同号则结果为0(假),异号则结果为1(真) 例:0 ^ 0 = 0 0 ^ 1 = 1 1 ^ 0 = 1 1 ^ 1 = 0
(2)功能:
a. 使特定位翻转
例:设有01111010,想使其低4位翻转,即1变为0,0变为1
01111010
^ 00001111
01110101
结论:与 0 异或不变,与 1 异或翻转
b. 交换两个数的值
例: a=3,b=4,将a,b的值交换
a = a ^ b ;
b = b ^ a ;
a = a ^ b ;
4、“取反”运算符 ~
含义:是单目运算符,用来对一个二进制数按位取反,即将0变1,将1变0
5、“左移”运算符 <<
含义:将一个数的各二进制位全部左移若干位
例: a = < < 2 将 a 的二进制数左移2位,右边补0 若 a = 15,即二进制数00001111,左移2位得00111100,十进制数60
注意:
a. 若高位左移后溢出,则舍弃
b. 相当于每左移以为就乘以2,但此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况
6、“右移”运算符 >>
含义:将一个数的各二进制位全部右移若干位,移到右端的低位被舍弃,右移一位相当于除以2
例: a = 017 时,二进制形式为00001111,则 a > > 2 == 00000011
注意:
a. 对无符号数,高位补0
b. 对于有符号的值,如果原来符号位为0(该数为正),则左边也是移入0
c. 如果符号位原来为1(即负数),则左边移入0还是1取决于所用的计算机系统
d. 移入0的称为“逻辑右移”;移入1的称为“算术右移” 例:a 的值是 -2
a == 11111110
无符号数:a > >1:01111111(逻辑右移)
有符号数:a > >1:11111111(算术右移)
6、位运算赋值运算符
例如:&= |= >>= <<= ^= a &= b 相当于 a = a & b a <<= 2 相当于 a = a << 2