& 和 && 的区别,与(&)运算符、位移运算符(<< 、>>、>>>)的含义及使用(Java示例)

& 和 && 的区别,与(&)运算符、位移运算符(<< 、>>、>>>)的含义及使用(Java示例)

1. & 和 &&

& 和 && 都是逻辑运算符 都是判断两边是否为真

运算符两边没有值的改变时,两者结果一样

运算符两边有值改变时,&会两侧都执行运算,&&只会在两侧都是两侧都是true时两侧都进行运算否则只执行左侧

  • 运算符两边没有值的改变时
@Test
public void Operator(){
    int m =1,n =2;
    System.out.println(m>0&n>0);
    System.out.println(m>0&&n>0);
}
/*
  * 输出结果:
    true
    true
  * */
  • 运算符两边有值改变时
@Test
public void Operator(){
    int m =1,n =1;
    System.out.println((m++>2&m++>0) + "  " + m);
    System.out.println((n++>2&&n++>0) + "  " + n);
}
 /*
  * 输出结果:
    false  3
    false  2
  * */

两侧都为true时两侧都执行运算

@Test
public void Operator() {
    int m = 1, n = 1;
    System.out.println((m++ > 2 & m++ > 0) + "  " + m);
    System.out.println((n++ > 0 && n++ > 0) + "  " + n);
}
/*
* 输出结果
false  3
true  3
* */

2. 与(&)运算符

& 运算符是对数值转化为二进制进行&运算,对应位都为1是取1否则取0 例如:

128的二进制表示为1000 0000

129的二进制表示为1000 0001

​ 128&129 10000000

128&129 —>128

3&2 —>2

128&127—>0

@Test
public void AndOperator(){
    System.out.println(128&129);
    System.out.println(3&2);
    System.out.println(128&127);
}
/*
* 输出结果:
128
2
0
* */

3.移位运算符

百科解释

在数据在二进制的前提下:

"<<" 表示向左移动指定的二进制位数,低位空位补零,相当于在后边直接加上指定个数的0,

如:2<<1—>4,3<<1—>6;

"<<" 表示向右移动指定的二进制位数低位舍弃,高位空位补零,相当于在末尾直接去掉指定的位数,

如:2>>1—>1,128>>3—>16;

“>>>”按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同。
其他结构和>>相似

原文地址:https://www.cnblogs.com/qianyoo/p/9907905.html