Java语言的运算符(重点是位运算符和运算符之间的优先级)

运算符的优先级

算术运算符

+、-、*、/、%、++、-- 

注意:i++是先赋值后加1,++i是先加1后赋值;i--是先减1后赋值,--i是先减1后赋值

关系运算符

>、<、>=、<=、==、!=   关系运算符比较的结果是布尔类型

赋值运算符

=、+=、-=、*=、/=、%=

int i = 10;
i+=2;
相当于i=i+2;
i*=2;
相当于i=i*2;
i/=2;
相当于i=i/2;
i%=2;
相当于i=i%2;

逻辑运算符

!非(取反)、||或(至少有一个为真,整体为真)、&&与(同时为真才为真)  

注意例子||(或)

Java 中以下代码 
 

int a = 1;

boolean b = (a>0) || (a++>1); 
 

执行后,变量 a 和 b 的值为?
b=true,a=1;
注意在或里面执行,因为前面已经是(a>0)=true,所以后面就不执行了,所以后面的(a++>1)就不执行
如果(a++>1)放到前面,就会执行,后面结果a=2

 三元运算符

(表达式)?表达式1:表达式2;

表达式值为true  结果为表达式1,表达式值为false 结果为表达式2

位运算符

计算机对整数都是按二进制进行操作,按位非(~),按位与(&),按位或(|),按位异或(^),移位运算符(<<,>>,>>>) 具体理解看例子

实际上这些二进制的0和1之间没有空格,这样写为了便于辨别区分。

按位非~

 按位非~ 
           0000 0110    6
           1111 1001   -7
     原码:1000  0111
     反码:1111  1000
     加1: 1111  1001
          把6的二进制取反得到是负数,负数以补码存储,然后这个二进制就是补码,在通过补码往前推,减1,再取反就得到了-7的原码
       */
      byte b1 =6;
      System.out.println(~b1);
      结果为-7
       

按位与&

按位与&
       
                0000 0101    5
                0000 0010    2
       最后取: 0000 0000    0
   两者中 如果是相同的1就取1,不同的就取0

   System.out.println(5&2);
       最后值为0
        如果是5&3
                   0000 0101    5
                   0000 0011    3
         最后取:   0000 0001    1
        最后值为1

 按位或 |

按位或 |
  
     0000  0101    5
     0000  0011    3
     0000  0111    7
  只要二者有其中至少有一个1,就取1
   
    System.out.println(5&3);
最后取值为7

按位异或^

按位异或^
   
    0000 0101    5
    0000 0011    3
    0000 0110    6
   两者中  不同的就取1,相同的就取0
   
System.out.println(5^3);

移位运算符>>、<<、>>>

移位
 向左移<<
 int i =6<<2;

      0000 0110  6
      0001 1000  24
    向左移,每向左移动几次,代表乘几次2
    前面整数的二进制 向左移几位

      System.out.println(i);
      最后输出的24

 向右移
    向右移动以后,如果是一个正数,左边用0来补齐;如果是一个负数,左边用1来补齐
        int i2 = 6>>2;

        0000 0110   6
        0000 0001   1
    向右移2位,前面的用0补齐

    System.out.println(i2);
    输出的是1

        int i3 = -7>>2;
    
              1111 1001   -7
              1111 1110   -2
        原码:1000 0010
        反码:1111 1101
        加1: 1111 1110   
      以-7的补码向右移然后前面的用1补齐
      最后得到一个负数的补码,再往前推,先减1,在取反

      System.out.println(i3);
      最后输出的-2


    无符号右移>>>
    无论是正数还是负数,左边都用0来补齐

     因为前面-7默认定义的是int型,占4个字节
    -7
    11111111 11111111 11111111 11111001
    00111111 11111111 11111111 11111110

    System.out.println(-7>>>2);
    最后的结果为:1073741822
   

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RiderRole

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值