赞
踩
第四天(位运算符)
1.位运算符介绍
进行位运算的时候要将数据转成二进制补码,进行运算
&:按位与
|:按位或
^:按位异或
~:按位取反
<<:按位左移
>>:按位右移
2.按位与
符号:&
格式:数据1 & 数据2
规则:将数据转成二进制补码,按照低位对齐,对不齐前面补0。
"全1为1,有0则0"
应用场景:将一个数据的某一位或者某几位置0(第几位置0或者置1要从最低位作为第0位开始数)
例:将1位置0
0000 1010
& 1111 1101 --- 置0需要提供的数据
0000 1000
总结规律:
a、如果想将一个数据的第n位置0,只需要将数据 &(第n位是0其他位都是1的数)
b、如果想将一个数据的第n位和第n+1位置0,只需要将数据 &(第n位和第n+1位是0其他位都是1的数)
3.按位或
符号:|
格式:数据1 | 数据2
规则:将数据转成二进制补码,按照低位对齐,对不齐前面补0。
“有1则1,全0为0”
应用场景:将一个数据的某一位或者某几位置1
总结规律:a、如果想将一位数的第n位置1,只需要将数据 |(第n位是1,其他位都是0的数)
b、如果想将一位数的第n位和第n+1位置1,只需要将数据 |(第n位和第n+1位是1其他位都是0的数)
4.按位异或
符号:^
格式:数据1 ^ 数据2
规则:将数据转成二进制补码,按照低位对齐,对不齐前面补0。
“不同为1,相同为0”
例:10 ^ 25
0000 1010
0001 1001
^ 0001 0011 --- 19
5.按位取反
符号:~
格式:~数据
规则:将数据转成二进制补码,按照低位对齐,对不齐前面补0。
“所以位0变1,1变0”
例:
char a=7; ~a
0000 0111
~ 1111 1000
unsigned char d = ~a; // 1111 1000 248
char e = ~a; // 1111 1000 -8
6.按位左移
符号:<<
格式:数据 << 位数
规则:将数据转成二进制补码,所有位整体左移,低位补0,高位溢出舍弃。
应用场景:可以将1放在任意位置
例:
1<<0==0b1
1<<1==0b10
1<<2==0b100
...
相邻的两位置1
0b11 << 0 == 0b11 ---- 3 << 0
0b11 << 1 == 0b110 ---- 3 << 1
0b11 << 2 == 0b1100 ---- 3 << 2
7.按位右移
符号:>>
格式:数据>>位数
规则:将数据转成二进制补码,所有位整体右移,低位溢出舍弃,高位补符号位上的数据。
应用场景:
一般用于数据分割
int a = 0x12345678;
unsigned char ch1 = a; //ch1 == 0x78
unsigned char ch2 = a >> 8; // ch2 == 0x56
8.总结位运算的公式
前提:第几位置0或者置1要从最低位作为第0位开始数
8.1、将a的第n位置1,公式:a |=(1<<n);
8.2、将a的第n位和第n+1位同时置1,公式:a |=(3<<n);
8.3、将a的第n位置0,公式:a &=~(1<<n);
8.4、将a的第n位和第n+1位同时置0,公式:a &=~(3<<n);
8.5、判断a的第n位是0还是1,公式:a & (1<<n)看结果,如果结果不等于0,第n位是1,否则第n位是0;
8.6、将a的第n+1位和第n位置01或者10
先清00 a &=~(3<<n);
再重置01或者10 a |=(1<<n); 或者 a |=(2<<n);
8.7、将a的第n位0变1,1变0
a ^=(1<<n);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。