java位运算,逻辑运算符
位运算逻辑运算符包括: 与(&),非(~),或(|),异或(^).
- &: 条件1&条件2 ,只有条件1和条件2都满足, 整个表达式才为真true, 只要有1个为false,整个表达式就为假false
- 如果条件1为假false, 条件2仍旧需要判断
- 除了用于逻辑条件以外,还可以做数字之间的按位与
- &&: 条件1&条件2 ,只有条件1和条件2都满足, 整个表达式才为真true, 只要有1个为false,整个表达式就为假false
- 如果条件1为假false, 条件2不需要判断
- |: 条件1 | 条件2 ,只要有一个条件为真true,整个表达式就为真true , 如果2个条件都为假,整个表达式才为假false
- 如果条件1为真,条件2仍旧需要判断
- 除了用于逻辑条件以外,还可以做数字之间的按位或
- ||: 条件1 || 条件2 ,只要有一个条件为真true,整个表达式就为真true , 如果2个条件都为假,整个表达式才为假false
- 如果条件1为真,条件2不需要判断
- ^: 按位异或. 参与运算的两个值,如果两个相应位相同,则结果为0,否则为1.
- 0异或任何数等于任何数, 1异或任何数等于任何数取反, 任何数异或自己等于把自己置0
~: 按位取反. 0变1,1变0. 负数在内存中的表现是, 按位取反再加1.
通过按位异或运算,可以实现两个值的交换,而不必使用临时变量.
public class Demo3 { public static void main(String[] args) { /** 数a两次异或同一个数b(a=a^b^b)仍然为原值.*/ int a = 100; int b = 666; a = a ^ b; b = b ^ a; a = a ^ b; System.out.println("a: " + a + " b " + b); } }
可用异或进行加密
&: 与. 当两边操作数的位同时为1时, 结果为1, 否则为0.
位运算判断奇偶, 偶数的最低位是0,奇数的最低位是1.通过这个原理, 我们可以根据整数二进制最后一位与1比较, 判断奇偶.
public class Demo2 { public static void main(String[] args) { /** 随机一个整数*/ int a = new Random().nextInt(); /** 判断奇偶性*/ String numStr = ((a & 1) == 1) ? "奇数" : "偶数"; System.out.println("随机数为: " + a + " 是: " + numStr); } }
java移位运算符包括:
- <<:左移位
- >>:带符号右移
- >>>:无符号右移
都是相对于二进制的补码来进行移动的
在Java语言中, 二进制数使用补码表示, 最高位为符号位, 正数的符号位为0, 负数为1.
补码的表示规则:
- 正数的最高位为0,其余各位代表数值本身(二进制数).
- 对于负数,通过对该数绝对值的补码按位取反,再对整个数加1.