位运算符
位运算符的作用是按位(二进制)对变量进行运算
位运算符不能对浮点型数据进行操作 ??? ??
1) & ?按位与(有0为0,全1为1)?
2) | ?按位或(有1为1,全0为0) ??
3) ^ ?按位异或(相同为0,不同为1)?
4) ~ ?按位取反 (1变0,0变1)?
5) << 按位左移 ?(高位溢出,低位补0)
6) >> 按位右移 ? (低位溢出,高位补0)
1)按位与?
符号: & ??
格式: 数据1 ?& ?数据2 ? ? ? ?数据(常量,变量)
例子: 10 ?& ?25 ? ? ?//例子都是char类型
原理: ①将两个数据转换成二进制(补码)的形式 ? ??
②低位到高位一一对应 ? ?
0000 1010 ? ?//10 ??
0001 1001 ? ?//25?
③规则: 有0为0,全1为1 ??
0000 1010 ? ?//10 ??
&?
0001 1001 ? ?//25 ?? ?
-------------------------------?? ??? ??? ??? ? ??
0000 1000 ? ?//8 ? ?? ? ?
说明:按位与是用来对某一个位进行置为0
如果需要对每个数据的二进制中的某一位置0,按位与一
个对应位是0的数据,按位与是用来对数据的二进制位置0 ?
2)按位或 ?
符号:| ??? ??? ?格式: 数据1 | 数据2 ??
例子: 10 | 25 ? ?//例子都为char ??
原理: ? ①将两个数据都转换成二进制(补码)的形式 ? ?
②低位到高位一一对应 ??
0000 1010 ? ? //10 ?
0001 1001 ? ? //25 ?
③规则: 有1为1,全0为0
0000 1010 ? ? //10
?|?? ??? ??? ??? ? ?
0001 1001 ? ? //25 ??? ??? ??? ??? ??
0---------------
0001 1011 ? ? //27
说明:对应位置为1?
如果需要将某个数据的二进制的某一位置1,
按位或一个对应位是1的数据 ? ?
按位与是用来对数据的二进制位置1 ??
注意: ?&置0,|置1?? ??? ??? ??? ? ?
3)按位异或?
符号:^ ? ?
格式:数据1 ^ 数据2
例子: 10 ^ 25 ? ?//例子都为char ??
原理: ?①将两个数据都转换成二进制(补码)的形式 ? ?
②低位到高位一一对应 ??
0000 1010 ? ? //10 ?
0001 1001 ? ? //25 ?
③规则:相同为0,不同为1
0000 1010 ? ? //10
^?? ??? ??? ??? ? ?
0001 1001 ? ? //25 ? ? ? ?? ??? ??? ??? ??
---------------------- ?
0001 0011 ? ? //19 ??
4)按位取反 ??? ??? ? ?
符号:~ ?
格式:~数据 ?
例子: ~10 ? ?//例子都为char ??
原理: ?
①将该数据转换成二进制(补码)的形式 ? ?
0000 1010 ?//10?
②规则: 0变1 ? 1变0 ??
~ 0000 1010 ?
?---------------
? 1111 0101 ? ? ??? ??? ??? ??? ??
5)按位左移 ?
符号:<< ?
格式:数据 << 移动的位数 ? ?
例子:10 << 1 ? //例子都为char ??
原理: ?
①将该数据转换成二进制(补码)的形式 ? ?
0000 1010 ? //10 ?
②整体左移,低位补0 ? ?? ??? ??? ??? ??? ?
0001 ?0100 ? ?//20
规律:?
数据左移一位,十进制形式扩大2倍 ? ?
int a = 120;
char b; ?-128 ~ 127 ?
b = a << 2; ? b:480 - 256=224 -256= -32
?
int a = 20000;
short b; ?-32768 ~ 32767 ? ??
b = a << 2; ? ?b:80000 - 65536 = 14464
6)按位右移 ? ? ? ? ??
?符号:>> ?
?格式:数据 >> 移动的位数 ? ?
?例子:10 >> 1 ? //例子都为char ??
?原理: ①将该数据转换成二进制(补码)的形式 ? ?
0000 1010 ? //10 ?
②整体右移,高位补0 ? ?? ??? ??? ??? ??? ?
00000 101 // ?5
规律: 数据右移一位,十进制形式缩小2倍 ?
----------------------------------------------------------?
位运算符的优先级: ? ~
<< ?>> ??
& | ^ ?? ?