java-运算符

运算符

本篇文章只讨论了几点关于运算符易错且需要注意的知识点,易于理解以及很常见的没有提及

算数运算符

  1. 问:大家都知道运算符分为单目与双目运算符,那么单目与双目到底是什么意思呢?

    答:单目就是需要一个对象就可以完成的运算,例如:a++,b--、、、,同理,双目就是需要两个对象,比如:a+b、c*d、、以此类推,还有三目等

  2. 问:双目有哪些?

    答:双目主要有5种,分别是(+)(-)(*)(/)(%)

    System.out.println(5%2); //1
    System.out.println(5%2.5);//0.0
    System.out.println(5%5); //0
    

    原理上,%仅用于整数类型的运算,上述代码显示,在java里面,%可以运算符点数,但是结果同样符点数,如果运算整数,则结果仍为整数。

  3. 问:单目有哪些?

    答:++、--、-(取反)

逻辑运算符

  1. 问:有哪几种?

    答:共6种,&(与)、|(或)、!(非)、^(异或)、&& (条件与)、| (条件或)

  2. 问:(与、或)和(条件与、条件或)的区别?

    答:运算的效果都一样,但是&&、|| 的效率更高,更常用,具有短路运算的功能

    false&&true  
    //false    
    

    上述代码,从左向右计算时,由于是与运算且第一个是false,因此结果必定是false,程序便不再判断右边的真假。

位运算符

  1. 问:种类及用法?

    答:7种,~(位反)、&(位与)、|(位或)、^(位异或)、<<(左移位)、>>(右移位)、>>>(无符号右移位),位运算是对整数类型的操作数以二进制进行的运算,结果仍为整数。

    //位反(~)
    int a=36,b=12  //以二进制表示a=100100,b=1100
    System.out.println(~a) //-133
    

    上述代码是取反操作,a的二进制为100100,取反后应为011011,所以理论上运算结果为27,但是结果却是-133,要搞懂这个,先要了解几个知识点,

    • 原码:原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。例如,我们用8位二进制表示一个数,+11的原码为00001011,-11的原码就是10001011

    • 反码:反码的作用即使解决对负数进行加法运算的问题,正数的反码是其本身,负数的反码是除了符号位外,其余取反

      例如+1 用8位表示,原码:0000 00001 反码:0000 0001

      ​ -1 原码:1000 0001 反码:1111 1110

    • 补码:正数的补码是其本身,负数的补码是其原码加1

    由于Java的取反运算是在补码的基础上计算的,且二进制是32位 了解了以上知识之后,再来看,取反的运算过程:

    • 36转换为二进制 00000000000000000000000000 100100
    • 36的补码为:00000000000000000000000000 100100
    • 对补码取反:11111111111111111111111111 011011
    • 取反后的补码转换到原码才能计算出结果;原码 = 反码符号位不变,其余取反
    • 计算取反后补码的反码,10000000000000000000000000 100100
    • 原码=11111111111111111111111111 011011
  • 计算结果:System.out.println(ob11111111111111111111111111011011) //-37

规律:~x=-(x+1);

   //位与(&)
   int a=2,b=3,result; //二进制表示 a=10 b=11
   System.out.println(a&b); // 2
   //位或(|)
   System.out.println(a|b)// 3

上述代码为位与和位或运算,a=10,b=11,逐位进行与操作后为result=10,换算成十进制即为2,同理,进行或操作后结果为3。

//异或(^)
int a=2,b=3,result; //二进制表示 a=10 b=11
System.out.println(a^b) // 1

上述代码为异或运算,异或的运算规则为,二进制相同位置上,值相同则取0,不同则取1

​ a=10

​ b=11

result=01

所以结果为1

//左移、右移
int a=12,b=2;// 二进制表示a=1100 b=10
System.out.println(a<<b);//48
System.out.println(a>>b);//3

上述代码为左移、右移运算,规律就是,左移x位就是乘以2的x次方倍,左移x位就是除以2的x次方倍,

a=12,乘以4,所以结果为48,12除以4,结果为3;

posted @ 2019-09-30 14:44  翁德彪  阅读(281)  评论(0编辑  收藏  举报