运算符
算术运算符
混合运算
-
当进行多类型混合运算时,结果是参与运算的最大类型
-
当只有
byte
short
int
char
四种类型中任意一种或多种进行运算,结果一定是int
类型
关系运算
位运算/逻辑运算
位运算进阶
// & 也支持两边是数字,转换为二进制进行每位比较,都是1 则取1,否则取0
// 运算结果,不会超过两个数中的最小数,所以适合用于做数组下标技术(包括hash算法)
// 0000 1111
// 0000 1000
// 0000 1000
System.out.println(15 & 8);
// ^ 也支持两边是数字,转换为二进制进行每位比较,不同取1,相同取0
// 因此 两个相同数进行^ , 结果得0 , 并且 0和任何数进行^ , 该数不变
// 0000 1111
// 0000 1000
// 0000 0111
System.out.println(15 ^ 8);
System.out.println(15 ^ 56 ^ 23 ^ 15 ^ 23);
// ~ 按位非,转换二进制,1变0,0变1 (符号位也会变)
// 0000 1100
// 1111 0011 补码
// 1111 0010 反码
// 1000 1101
System.out.println(~12);
// >> : 右移运算(考虑符号位,符号位不受影响)
// 10 >> 1 , 右移1次,会把最右边的一个删除,在最左边补0 (如果是负数,就补1)
// 右移一次,相当于该数 / 2
// 0 00000 10
System.out.println(10 >> 2);
// 1000 1010
// 1111 0101
// 111111 01
// 111111 00
// 100000 11
System.out.println(-10 >> 2);
// >>> : 右移运算(不考虑符号位),只补0,不补1
System.out.println(10 >>> 2);
// 1000 0000 0000 0000 0000 0000 0000 1010
// 1111 1111 1111 1111 1111 1111 1111 0101
// 001111 1111 1111 1111 1111 1111 1111 01
System.out.println(-10 >>> 2);
System.out.println(0b00111111111111111111111111111101);
// << : 左移运算,只补0, 不补1
// 左移1次,相当于该数*2
// 0000 0010
// 00 001000
System.out.println(2 << 2);
// 1000 0010
// 1111 1101
// 1111 1110
// 11 111000
// 11 110111
// 10 001000
System.out.println(-2 << 2);
// 如何快速计算2的3次方?
System.out.println(2 << 2);