运算符的分类
注:
①:位运算符中除了 “ ~ ” 以外,均为二元运算符,即两侧都要各有一个运算量。
②:参加位运算的对象只能是整型或字符型的数据,不能为实型数据。
③:所有的位运算都是在二进制补码的基础上进行操作的。
一:按位与:&
1.表达式: a & b
2.功能: 将左右两个整数的二进制补码按位进行与操作。
3.举例:
4.计算: 两个位都是1,结果就是1,否则为0。
5.巧用:
设X是一个正整数。
①:
X & 1
<=>x % 2
用于判断奇偶数和判断一个整数的二进制补码尾部是否为1。②:清零: 如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都是零的数值相与,结果为零。
③:取一个数中的指定位:
例如: 设X=10101110
,取X的低四位,用X&0000 1111=0000 1110
即可得到。
方法: 找一个数,对应x要取的位,该数的对应位为1,其余位为零,此数与x进行“与运算”可以得到x中的指定位。
二:按位或:|
1.表达式: a | b
2.功能: 将左右两个整数的二进制补码按位进行或操作。
3.举例:
4.计算: 两个或一个位是1,结果是1,否则为0。
5.巧用:
常用来对一个数据的某些位置1。
方法: 找到一个数,对应x要置1的位,该数的对应位为1,其余位为零。此数与x相或可使x中的某些位置1。
三.按位异或:^
1.表达式: a ^ b
2.功能: 将左右两个整数的二进制补码按位进行异或操作。
3.举例:
4.计算: 两个位不同,结果是1,否则结果是0。
5.巧用:
①: 与1相异或,使特定位翻转。
方法: 找一个数,对应X要翻转的位,该数的对应为1,其余位为零,此数与X对应位异或即可。
例如:X = 1010 1110
,使X低四位翻转,用X ^ 0000 1111 = 1010 0001
即可得到。②: 与0相异或,保留原值。
③: 交换两个值,不用临时变量。
原理: 一个数异或本身等于0 ,异或运算符合交换律。
例如:
x = x ^ y;
y = x ^ y;
x = x ^ y;
//x与y的值发生交换
四.按位非:~
1.表达式: ~a
2.功能: 对一个整数的二进制补码进行非运算。
3.举例:
~ 1 = 0;
~ 0 = 1;
4计算: 操作一个数,对位取反,0变成1,1变成0。
五.按位左移:<<
1.表达式: 被操作的数据 << 被位移数
2.举例:
3.计算: 左移左边被舍弃,左移右边补0。
4.巧用:
对于正整数而言,左移1位即扩大2倍。
k = x << 1
<=>k = x * 2
六.按位右移:>>
1.表达式: 被操作的数据 >> 被位移数
2.举例:
3.计算: 右移右端被舍弃,对无符号数,左边高位补0,对于有符号数,如果原来符号位为0(该数为正),则左边也补0,如果原来符号位为1(该数为负),则左边补0还是1,要取决于所用的计算机系统,补0的称为“逻辑右移”,即简单的右移,不考虑数的符号问题,补1的称为“算数右移”(保持原有的符号)。
4.巧用:
对于正整数而言,右移一位即除以2.
k = x >> 2
<==>k = x / 2