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.

 

 


 

posted @ 2019-10-09 20:31  MRCHENH  阅读(276)  评论(0编辑  收藏  举报