当前位置:   article > 正文

Java 运算符详解(&、&&、|、||、^、<<、>>、~、>>>)_java &&

java &&

Java运算符大致分为逻辑运算符(&&,||,!)、算数运算符(+, -, *, / ,+=)、位运算符(^,|,&)、其他运算符(三元运算符)

不了解二进制运算的同学可以看我的另一篇有关于进制运算的 二进制运算

  • &(按位与)

 

  1. public class Test{
  2. public static void main(str[] arg){
  3. int i = 3&5;//1
  4. int j = 5&7;//5
  5. System.out.print(i+""+j);
  6. }
  7. }

位运算

&按位与的运算规则是将两边的数转换为二进制位,然后运算最终值,运算规则即(两个为真才为真)1&1=1 , 1&0=0 , 0&1=0 , 0&0=0

3的二进制位是0000 0011 , 5的二进制位是0000 0101 , 那么就是011 & 101,由按位与运算规则得知,001 & 101等于0000 0001,最终值为1

7的二进制位是0000 0111,那就是111 & 101等于101,也就是0000 0101,故值为5

  • &&(逻辑与)

 

逻辑运算符

&&逻辑与也称为短路逻辑与,先运算&&左边的表达式,一旦为假,后续不管多少表达式,均不再计算,一个为真,再计算右边的表达式,两个为真才为真。

  • |(按位或)

 

  1. public class Test{
  2. public static void main(str[] arg){
  3. int i = 6|2;//6
  4. System.out.print(i);
  5. }
  6. }

位运算符

|按位或和&按位与计算方式都是转换二进制再计算,不同的是运算规则(一个为真即为真)1|0 = 1 , 1|1 = 1 , 0|0 = 0 , 0|1 = 1

6的二进制位0000 0110 , 2的二进制位0000 0010 , 110|010为110,最终值0000 0110,故6|2等于6

  • ||(逻辑或)

 

逻辑运算符

逻辑或||的运算规则是一个为真即为真,后续不再计算,一个为假再计算右边的表达式。

  • ^(异或运算符)

  1. public class Test{
  2. public static void main(str[] arg){
  3. int i = 5^9;//12
  4. System.out.print(i);
  5. }
  6. }

位运算符

^异或运算符顾名思义,异就是不同,其运算规则为1^0 = 1 , 1^1 = 0 , 0^1 = 1 , 0^0 = 0

5的二进制位是0000 0101 , 9的二进制位是0000 1001,也就是0101 ^ 1001,结果为1100 , 00001100的十进制位是12

  • <<(左移运算符)

 

  1. public class Test{
  2. public static void main(str[] arg){
  3. int i = 5<<2;//20
  4. System.out.print(i);
  5. }
  6. }

位运算符

5<<2的意思为5的二进制位往左挪两位,右边补0,5的二进制位是0000 0101 , 就是把有效值101往左挪两位就是0001 0100 ,正数左边第一位补0,负数补1,等于乘于2的n次方,十进制位是20

  • >>(右移运算符)

 

  1. public class Test{
  2. public static void main(str[] arg){
  3. int i = 5>>2;//1
  4. System.out.print(i);
  5. }
  6. }

位运算符

凡位运算符都是把值先转换成二进制再进行后续的处理,5的二进制位是0000 0101,右移两位就是把101左移后为0000 0001,正数左边第一位补0,负数补1,等于除于2的n次方,结果为1

  • ~(取反运算符)

 

  1. public class Test{
  2. public static void main(str[] arg){
  3. int i = ~5;//-6
  4. System.out.print(i);
  5. }
  6. }

位运算符

取反就是1为0,0为1,5的二进制位是0000 0101,取反后为1111 1010,值为-6

  • >>>(无符号右移运算符)

  1. public class Test{
  2. public static void main(str[] arg){
  3. int i = 15>>>2;//5
  4. System.out.print(i);
  5. }
  6. }

正数无符号右移

无符号右移运算符和右移运算符的主要区别在于负数的计算,因为无符号右移是高位补0,移多少位补多少个0。

15的二进制位是0000 1111 , 右移2位0000 0011,结果为3

 

负数无符号右移

-6的二进制是6的二进制取反再加1,6的二进制也就是0000 0000 0000 0000 0000 0000 0000 0110,取反后加1为1111 1111 1111 1111 1111 1111 1111 1010,右移三位0001 1111 1111 1111 1111 1111 1111 1111

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/290877
推荐阅读
相关标签
  

闽ICP备14008679号