专栏首页指尖下的AndroidJava &、&&、|、||、^、<<、>>、~、>>>等运算符

Java &、&&、|、||、^、<<、>>、~、>>>等运算符

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

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

&(按位与)

位运算符

&按位与的运算规则是将两边的数转换为二进制位,然后运算最终值,运算规则即(两个为真才为真)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|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^0 = 1 , 1^1 = 0 , 0^1 = 1 , 0^0 = 0

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

<<(左移运算符)

位运算符

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

>>(右移运算符)

位运算符

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

~(取反运算符)

位运算符

取反就是1为0,0为1,5的二进制位是0000 0101,取反后为1111 1010,值为-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

至于这个负数的无符号右移为什么是4个字节位的移动,我也不太清楚,还望高手赐教,有所纰漏,欢迎留言,谢谢。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Java &、&&、|、||、^、<<、>>、~、>>>等运算符

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

    lyb-geek
  • JAVA位运算等运算符总结

    可以将boolean的true和false看作是1和0,这样&和|的意义就是按位与和按位或。

    品茗IT
  • Java的算数运算符、关系运算符、逻辑运算符、位运算符

    b=5,a=5 c=-5,a=5 d=3,l=3 f=3,m=4 g=3,n=3 h=6,o=5

    慕白
  • Java运算符

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200605110311994.png?x-oss-process=ima...

    用户7886150
  • Java运算符

    DataScience
  • Java 运算符

    尽管+运算符经常用于将两个值相加,如上面的示例,但它也可用于将一个变量和一个值相加,或者将一个变量和另一个变量相加

    川川菜鸟
  • Java运算符

    需要注意的是,如果第一个操作数已经能判断结果了,那么就不会执行下一个操作数,比如:

    dongfanger
  • Java运算符

    Java架构师必看
  • Java的运算符

    Java的运算符 运算符是一种特殊符号,用以表示数据的运算、赋值和比较等共分以下几种: 1.1括号:() [] 1.2一元运算符(只有1个操作数):!(逻...

    Java学习
  • Java instanceof 运算符

    多态性带来了一个问题,就是如何判断一个变量所实际引用的对象的类型 。 C++使用runtime-type information(RTTI),Java 使用 i...

    用户7886150
  • Java 位运算符

    位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主...

    老九学堂-小师弟
  • 「Java Grammar」:运算符

    计算机自打诞生以来,用作最多的就是进行计算,而计算离不开运算符,所以运算符在我们的Java语言中的地位举足轻重,我们现在就来了解一下Java给我们提供的运算符。

    山禾说
  • Java 运算符 % 和 /

    yuanyuan
  • Java Grammar:运算符

    修饰符是用于限定类型以及类型成员申明的一种符号,从修饰对象上可以分为类修饰符,方法修饰符,变量修饰符;从功能上可以划分为访问控制修饰符和非访问修饰符。访问修饰符...

    山禾说
  • java 关系运算符和逻辑运算符

    关系运算符 > ,< ,>=, <=, !=, == 逻辑运算符:与:&& (&),或: ||( |) ,非:! 返回的都是布尔值,java中是没有1和0 来代...

    用户7886150
  • Java运算符及运算符的优先级

    赋值运算符算术运算符关系运算符逻辑运算符位运算符三目运算符instanceof运算符

    用户7886150
  • matlab赋值运算符等号

    演化计算与人工智能
  • Java之算数运算符

    兮动人
  • java 的位运算符

    // Shift operation '<<' by overly large constant value

    haoming1100

扫码关注云+社区

领取腾讯云代金券