Java位运算是针对于整型(byte、char、short、int、long)数据类型的二进制进行的移位操作。
一. 右移
右移1位相当于原数字除以2运算
int a = 20;
int num = a>>1;
System.out.println("num="+num);
运行结果:
运算过程:
①把十进制20转化成二进制数10100
②10100右移1位1010
③再把二进制1010转化为二进制数得10
二.左移
左移1位相当于原数字乘2运算
int a = 5;
int num = a<<1;
System.out.println("num="+num);
运行结果:
运算过程:
①把十进制5转化成二进制数101
②101左移1位1010
③再把二进制1010转化为二进制数得10
三.& 按位与
int a = 10;
int num = a&3;
System.out.println("num="+num);
运算结果:
运算过程:
①把十进制10转化成二进制数1010,十进制数3转化为二进制数0011
②计算方法 按位与运算,两个当且仅当都为1的时候结果才为1,即1&11,1&00&10&00
③
1010
0011
---------------------------
0010
③再把二进制0010转化为二进制数得2
四.& 按位或
int a = 10;
int num = a|3;
System.out.println("num="+num);
运算结果:
运算过程:
①把十进制10转化成二进制数1010,十进制数3转化为二进制数0011
②计算方法 按位或运算,有1为1,无1为0,即1|11,1|01 0|11 0|00
③
1010
0011
---------------------------
1011
③再把二进制1011转化为二进制数得11
五.异或^
int a = 10;
int num = a^3;
System.out.println("num="+num);
运行结果:
运算过程:
①把十进制10转化成二进制数1010,十进制数3转化为二进制数0011
②计算方法 异或运算,
0异或任何数,其结果=任何数 0^1=1 0 ^ 0 =0
1异或任何数,其结果=任何数取反 1 ^0 = 1 1 ^1 = 0
任何数异或自己,等于把自己置0 x ^ x = 0
③
1010
0011
---------------------------
1001
③再把二进制1001转化为二进制数得9