JAVA算数操作符

1.引言

  • Java的基本算数操作符与其他大多数程序设计语言是相同的。包括加(+)、减(-)、乘(*)、除(/,注意:"/"运算会直接去掉结果的小数位,而不是四舍五入地得到圆整结果)以及取模运算(%,即取从整数除法中产生的余数)。
  • Java也使用一种来自C和C++的简化符号同时进行运算与赋值操作。这就用操作符后紧跟一个等号来表示,它对于Java中的所有操作符都适用,只要有实际意义就行。eg:将i加5,并将结果赋回给i,可以这么写:i + = 5。

2.各种运算符描述

  • 2.1一元加、减操作符

    • 一元加(+)和一元减(-)和二元加号和减号都使用相同的符号。根据表达式的书写形式,编译器会自动判断出使用的是哪一种。
      eg:
      	1	i = -a; //将 i - a再赋回给i
      	2	i = a * -b; //编译器可以正确识别此语句
      	3	i = a * (-b); //此语句等同于语句2
      
    • 一元减号用于转换数据的符号,而一元加号只是为了与一元减号相对应,但是它唯一的作用仅仅是将较小数据类型(byte、char、short)的操作数(自动)提升为int型再进行运算。
  • 2.2自动递增和递减

    • Java提供了大量的快捷运算。这些快捷运算时编码更加方便,同时也使得代码更容易阅读和理解,但世事无绝对,有时也会使得代码阅读起来更加困难。
    • 递增和递减运算符
      • 递增和递减运算是两种相当不错的快捷运算。"- -“意为"减少一个单位”;"++“意为"增加一个单位”。
        eg:
          /*递增和递减操作符不仅改变了变量,并且以变量的值作为其生成的结果 */
      	1 int i = 1;
      	2 ++i; //等价于i = i + 1;
      	3 --i; //等价于i = i - 1;
      
      • 递增和递减操作符的两种使用方式:前缀式和后缀式。
        前缀式++i、- -i :会先执行运算,再生成值。
        后缀式i++、i- - :会先生成值,再执行运算。
      	1 int i = 1;
      	2 int j = 1;
      	3 System.out.println("i="+ ++i); // 输出结果为i=2
      	4 System.out.println("j="+ j++); //输出结果为j=1
      	5 System.out.println("j="+ j); //输出结果为j=2
      	/* --和++的前缀和后缀式运算规则一样,这里就不做赘述*/
      
      递增递减运算归纳:从上数运算结果可以看出,对于前缀式,我们在执行运算后才得到值,而对于后缀式,则是在运算执行之前就得到值。它们是除那些涉及赋值的操作符以外唯一具有“副作用”效果的操作符。
  • 2.2关系操作符

    • 常见的关系运算符包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)、不等于(!=)。它们生成的结果是一个boolean(布尔)类型,如果关系是"正确的"则结果为true(真),如果关系"不正确"则结果为false(假)。 注意:等于和不等于适用于所有的基本数据类型,而其他比较符不适用与boolean类型。因为boolean值只有 true 或 false(默认值),"大于"和"小于"没有实际意义。
      这里的==运算会涉及到比较内容和比较对象引用。就不得不提到equals方法了。两者之间的关系并不是本文的重点,日后会在其他文章做详细阐述。
      
  • 2.3逻辑操作运算符

    • 逻辑操作符"与"(&&)、“或”(||)、“非”(!)、可以根据参数的逻辑关系生成一个布尔值。
      &&:又称短路与,在(a && b)中,要求a和b都为true时(a && b)整体才为true
      ||:又称短路或,在(a || b)中,只要a或b有一个为true时(a || b)整体就为true

      1 int i = 55;
      2 int j = 65;
      3 System.out.println("(i<60)&&(j<60) is" + " " + ((i < 60) && (j < 60))); //输出结果为((i<60)&&(j<60)) is false
      4 System.out.println("(i<60)||(j<60) is" + " " + ((i < 60) || (j < 60))); //输出结果为((i<60)||(j<60)) is true
      5 System.out.println("(i != j) is" + " " + (i != j)); //输出结果为(i != j) is true
      

      在上述的代码中,可将int类型替换成除boolean类型以外的其他任何基本数据类型(byte、char、short、float、double、long)。但要注意的是,对于浮点数的比较时非常非常非常严格的。即使一个数仅在小数部分和另一个数存在极其微小的差异,仍然认为它们是不等的。
      注意:“与”、“或”、"非"操作只可应用与布尔值。不可以将一个非布尔值当作布尔值在逻辑表达式中使用。

    • 短路
      当使用逻辑操作符时,我们会遇到一种"短路"现象。即一旦能够明确无误地确定整个表达式的值(true或false),就不再计算表达式余下部分。实际上,如果所有的表达式都有一部分不必计算,那将获得潜在的性能提升。

  • 2.4移位操作符

    • 移位操作符操作的对象是二进制的"位"。移位操作符只可用来处理int类型。左移位操作符"<<“能按照操作符右侧指定的位数将操作符左边的操作数向左移动(在低位补0),“有符号” 右移位操作符”>>"则按照操作符右侧指定的位数将操作符左边的操作数向右移动
         1 int i = 80;
         2 int j = 80;
         3 System.out.println(Integer.toBinaryString(i)); //输出结果为80的二进制数1010000
         4 System.out.println(i>>3); //输出结果为10
         5 i>>=3; //将i的值向右移动3位并赋给i;
         6 System.out.println(Integer.toBinaryString(i)); //输出结果为10的二进制数1010
         7 System.out.println(i<<3); //输出结果为640
         8 j<<=3; //将j的值向左移动3位并赋给j;
         9 System.out.println(Integer.toBinaryString(j)); //输出结果为640的二进制数1010000000
      
      注意:如果对于char、byte和short类型的数值进行移位处理时,在移位进行之前,它们会被转化成int类型,并且最终得到一个int类型的结果,这和在执行运算符"+"是一样的。只有数值右端的低5位才有用(long类型为6位)。这样可以防止我们移位超过int类型值所具有的位数(2的5次方为32,而int型值只有32位)。
    • "移位"可与"等号"组合使用(<<=或>>=)。此时,操作符左边的值会移动到由右边的值指定的位数,再将得到的结果赋给左边的变量。
  • 2.5其他操作符

    后续更新

3.归纳

  • 如果对基本数据类型执行算数运算或按为运算时,只要类型比int小的,那么在运算之前,这些值会自动转换成int型,且最终生成的结果就位int型。而当把结果赋值给较小的类型时,就必须进行强制类型转换(使用是要谨慎,可能会出现信息丢失)。通常 表达式中出现的最大数据类型决定了表达式最终的数据类型。如果将一个float值与一个doube值相乘,结果就是double。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值