zoukankan      html  css  js  c++  java
  • 黑马程序员第一阶段2.java编程基础第4天

    -------------------- android培训java培训、期待与您交流!--------------------
     
    运算符:运算符是一种特殊符号,用以表示数据的运算、赋值和比较,一般由一至三个字符组成 。运算符共分以下几种:
    • 算术运算符(+、-、*、/、%、++、--、字符串相加的+)
    • 赋值运算符:=、+=、-=、*=、/=、%= (在JAVA里可以把赋值语句连在一起,如:  x = y = z = 5 ; )
    • 比较运算符:==、!=、>、<、<=、>=、instanceof (用来检查是否是类的对象,如:“你好” instanceof String   //结果为true)
    • 逻辑运算符:&(AND与)、|(OR或)、^(XOR异或)、!(NOT非)、&&(AND短路与)、||(OR短路或)
    • 移位运算符:&、|、^、>>、<<、>>>  

    ——“+”除字符串相加功能外,还能把非字符串转换成字符串 ,如: “x”+123;的结果是“x123” 。
    ——如果对负数取模,可以把模数负号忽略不记,如:5%-2=1。但被模数是负数就另当别论了。
    ——对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。 如:10/4=2;  10.0/4=2.5;  10/4.0=2.5;

    算术运算符的应用技巧

    • 思考题1:某个培训中心要为新到的学员安排房间,假设共有x个学员,每个房间可以住6人,让你用一个公式来计算他们要住的房间数?
        答案:(x+5)/6。为什么不是x/6,因为两个整数相除结果是一个整数,而且1个人也是要住一间房的,1/6很明显等于0,所以(x+5)/6是最合适的。这种算法还可用在查看留言板的分页显示上: 其中x是总共的留言数,6是每页显示的留言数,结果就是总共有多少页。
    • 假设你要让x的值在0至9之间循环变化,请写出相应的程序代码。
      答案:
      int x=0;
      while(true)
      {
          x = (x+1)%10;
      }

     注:

    • &、&&两边的值都为真才为真
    • |、||有一边的值为真就为真,或者两边的值为真也为真
    • ^   只有一边真一边假时结果才为真

          “&”和“&&”的区别在于,如果使用前者连接,那么无论任何情况,“&”两边的表达式都会参与计算。如果使用后者连接,当“&&”的左边为false,则将不会计算其右边的表达式。“|”和“||”的区别与“&”和“&&”的区别一样。

    “&”和“&&”的区别分析 

    • public class TestAnd
      {
         public static void main(String[] args)
         {
             int x=0;
             int y=3;
             if(x!=0 && y==y/x)
             System.out.println("y = "+y);
         }
      }
      上面例子中,由于while语句的判断条件中的第一个布尔表达式是不成立的,程序就不会判断第二个布尔表达式的值,这就是“短路”。如果两个表达式之间用“&”来连接,如果正好碰到上面所示的特殊情况,程序运行时就会出错

     位运算
           任何信息在计算机中都是以二进制的形式保存的,&,|,^除了可以作为逻辑运算符,也可以做为位算符,它们对两个操作数中的每一个二进制位都进行运算。

    • 只有参加运算的两位都为1,&运算的结果才为1,否则就为0。
    • 只有参加运算的两位都为0,|运算的结果才为0,否则就为1。
    • 只有参加运算的两位不同,^运算的结果才为1,否则就为0。

    我们可以对数据按二进制位进行移位操作,java的移位运算符有三种:

    • <<  左移(左边移出,右边补0)
    • >>> 无符号右移(右边移出,左边补0)
    • >>  右移(右边移出,左边补符号位)

    移位运算的注意事项及小技巧

    • 移位运算符适用类型有byte、short、char、int、long
    • 对低于int型的操作数将先自动转换为int型再移位。
    • 对于int型整数移位a>>b,系统先将b对32取模,得到的结果才是真正移位的位数。例如:a>>33和a>>1结果是一样的,a>>32的结果还是a原来的数字。
    • 对于long型整数移位时a>>b ,则是先将移位位数b对64取模。
    • 移位不会改变变量本身的值。如a>>1;在一行语句中单独存在,毫无意义 。
    • x>>1的结果和x/2的结果是一样的,x<<2和x*4的结果也是一样的。总之,一个数左移n位,就是等于这个数乘以2的n次方,一个数右移n位,就是等于这个数除以2的n次方。   如何用程序实现求2的x次方。答案:y = 1<< x;
    • 位运算都是对2进制进行操作的,即使给的是十进制数,该数在内存中也是二进制存在的。

    运算符的优先级 

    图片

    如何避免多个运算符带来的问题

    • int a =2; int b= (a ++)+ 3 * a   //b=11
    • 与其去思考其中的原因,我们还不如将上面的第二句改为几条语句来实现我们想要的结果。
    • 不要在一行中编写太复杂的表达式,也就是不要在一行中进行太多的运算,在一行中进行太多的运算并不能为你带来什么好处,相反只能带来坏处,它并不比改成几条语句的运行速度快,它除可读行差外,还极容易出错。
    • 对于优先级顺序,读者不用刻意去记,有个印象就行如果你实在弄不清这些运算先后关系的话,就用括号或是分成多条语句来完成你想要的功能,因为括号的优先级是最高的,这也是软件编码规范的一个要求。
    -------------------- android培训java培训、期待与您交流!--------------------
  • 相关阅读:
    时间复杂度和空间复杂度
    七、vue计算属性
    六、vue侦听属性
    四、vue派发更新
    五、vue nextTick
    三、vue依赖收集
    二、vue响应式对象
    递归
    链表
    TypeScript类型定义文件(*.d.ts)生成工具
  • 原文地址:https://www.cnblogs.com/runwind/p/4454762.html
Copyright © 2011-2022 走看看