黑马程序员技术交流社区

标题: 运算符 [打印本页]

作者: 我心飞翔    时间: 2011-12-21 09:44
标题: 运算符
本帖最后由 我心飞翔 于 2011-12-21 11:02 编辑

兄弟们能否把运算符的用法和形式给分类例举出来?:handshake不胜感激。
作者: 海中的游弋草    时间: 2011-12-21 09:49
运算符指明对操作数所进行的运算。按操作数的数目来分一元(如+-),二元运算符(如+、>)和三元运算符(如?:),它们分别对应于一元运算符来说,可以有前缀表达式(如++i)和后缀表达式(如采用中缀表达式(如a+b)。按照运算符功能来分,基本的运算符分下面几类:

    1.算术运算符(+,-,*,/,%,++,--)
    2.关系运算符(>,<,>=,<=,==,!=)
    3.布尔逻辑运算符(!,&&,||,—,|)
    4.位运算符(>>,<<,>>>,&,|,^,~)
    5.赋值运算符(=,及其复合赋值运算符如+=)
    6.条件运算符(?:)  

本章中我们主要讲述这6类运算符。

§2.1 算术运算符

算术运算符作用于整型或浮点型数据,完成算术运算。
一、二元算术运算符,如下表所示:

运算符 运算  举例说    明
+ 加 a+b 求a与b相加的和
+ 减 a-b 求a与b相减的差
* 乘 a*b 求a与b相乘的积
/ 除 a/b 求a除以b的商
% 取模 a%b 求a除以b所得的余数

   运算符     用法       描述
      +      op1+op2      加
      -      op1-op2      减
      *      op1*op2      乘
      /      op1/op2      除
      %      op1%op2     取模(求余)

  Java对"加"运算符进行了扩展,使它能够进行字符串的连接,如"abc"+"de",得到串"abcde"。我们将在以后讲解。

与C、C++不同,对取模运算符%来说,其操作数可以为浮点数,如37.2%10=7.2。

二、一元算术运算符

运算符 说  明
+ 正值
- 负值
++ 自加1
-- 自减1

i++与++i的区别:

i++在使用i之后,使i的值加1,因此执行完i++后,整个表达式的值为i,而i的值变为i+1。

++i在使用i之前,使i的值加1,因此执行完++i后,整个表达式和i的值均为i+1。

对i--与--i同样。

浮点变量也可以使用++和--操作符,作用与整型变量相同。

例2.1.下面的例子说明了算术运算符的使用

public class ArithmaticOp{
  public static void main(String args[]){
    int a=5+4;//a=9
    int b=a*2;//b=18
    int c=b/4;//c=4
    int d=b-c;//d=14
    int e=-d;//e=-14
    int f=e%4;//f=-2
    double g=18.4;
    double h=g%4;//h=2.4
    int i=3;
    int j=i++;//i=4,j=3
    int k=++i;//i=5,k=5
    System.out.println("a="+a);
    System.out.println("b="+b);
    System.out.println("c="+c);
    System.out.println("d="+d);
    System.out.println("e="+e);
    System.out.println("f="+f);
    System.out.println("g="+g);
    System.out.println("h="+h);
    System.out.println("i="+i);
    System.out.println("j="+j);
    System.out.println("k="+k);
  }
}

2.2 关系运算符

    关系运算符用来比较两个值,返回布尔类型的值true或false,关系运算符都是二元运算符,如下表所示:

运算符 含义 举例 说  明
< 小于 a<b a小于b
<= 小于等于 a<=b a小于等于b
> 大于 a>b a大于b
>= 大于等于 a>=b a大于等于b
== 等于 a==b a等于b
!= 不等于 a!=b a不等于b




Java中,任何数据类型的数据(包括基本类型和组合类型)都可以通过==或!=来比较是否相等(这与C、C++不同)。

关系运算的结果返回true或false,而不是C、C++中的1或0。

关系运算符常与布尔逻辑运算符一起使用,作为流控制语的判断条件。如

if(a>b&&b==c)

例2.2 下面的例子说明了关系运算符的使用

public class CompareNumber
{
  public static void main(String[] args)
  {
     int n=3;
     int m=4;
     System.out.println();
     System.out.println("n<m is "+(n<m));
     System.out.println("n=m is "+((++n)==m));
     System.out.println("n>m is "+((++n)>m));
     System.out.println("n is "+n);

  }
}


布尔逻辑运算符

  逻辑运算是针对布尔型数据进行的运算,运算的结果仍然是布尔型量。常用的运算符如下:

运算符 运算  例子 说  明
! 逻辑非 !x x真时为假,x假时为真
&& 逻辑与 x&&y x,y都真时结果才为真
& 非简洁与 x&y x,y都真时结果才为真
|| 逻辑或 x||y x,y都假时结果才为假
| 非简洁或 x|y x,y都假时结果才为假
^ 取或 x^y x,y同真假时结果为假

真值表:

op1  op2  op1&&op2  op1&op2  op1||op2  op1|op2  !op1  
false  false  false  false  false  false  true
false  true  false  false  true  true  true
true  false  false  false  true  true  false
true  true  true  true  true  true  false


·&&、&、‖、| 为二元运算符,实现逻辑与、逻辑或。

·!为一元运算符,实现逻辑非。

1.对于布尔逻辑运算,先求出运算符左边的表达式的值,然后在运算;

2.对逻辑或||的运算,如果左边表达式的值为true,则整个表达式的结果为true,不必对运算符右边的表达式再进行运算,非简洁或|和逻辑或||的真值表是一样的,不同的是运算符右边的表达式无论什么情况都要运算;

3.对逻辑与&&运算,如果左边表达式的值为false,则不必对右边的表达式求值,整个表达式的结果为false。非简洁与&和逻辑与&&的真值表是一样的,不同的是运算符右边的表达式无论什么情况都要运算;

例2.3下面的例子说明了关系运算符和布尔逻辑运算符的使用。

public class RelationAndConditionOp{
  public static void main(String[] args){
    int a=25,b=3;
    boolean d=a<b;//d=false
    System.out.println("a<b="+d);
    int e=3;
    if(e!=0&&a/e>5)
      System.out.println("a/e="+a/e);
    int f=0;
    if(f!=0&&a/f>5)
      System.out.println("a/f="+a/f);
    else
      System.out.println("f="+f);
  }
}


注意:上例中,第二个if语句在运行时不会发生除0溢出的错,因为e!=0为false,所以就不需要对a/e进行运算。

位运算符

位运算是对操作数以二进制为单位进行的操作和运算,位运算的操作数和结果都是整形变量,Java中提供了如下表所的位运算符:位运算符中,除 ~ 以外,其余均为二元运算符。操作数只能为整型和字符型数据。


运算符 运算 例子 说  明
~ 求补(位反) ~x 将x按比特位取反
<< 向左移位,从右边补0 x>>a x各比特位左移a位
>> 向右移位,从坐侧传递符号位 x<<a x各比特位右移a位
>>> 无符号向右移位,从左边补0 x>>>a x各比特位右移a位,左边的空位填零


位运算符通常与硬件打交道时用到,在Java中一般不太常用。

§2.5 赋值运算符(复合赋值运算符)

    赋值语句是程序设计最基本的语句之一,赋值运算的符号是等号,其右部是一个表达式,左部是变量,它把右部的值赋给左部的变量,等号左边的变量称为左值lvalue,右边称为右值rvalue。在Java中,赋值语句像函数一样有返回值,它的返回值即左值,有些语言没有这一特点。

运算符  例子  解释
+=  x+=a  x=x+a
-+  x-=a  x=x-a
*=  x*=a  x=x*a
/=  x/=a  x=x/a
%=  x%=a  x=x%a
&=  x&=a  x=x&a
|=  x|=a  x=x|a
^=  x^=a  x=x^a
<<=  x<<=a  x=x<<a
>>=  x>>=a  x=x>>a
<<<=  x<<<=a  x=x<<<a

例2.4下面的例子说明了赋值运算的使用。

 

public class LValue{
  public static void main(String[] args){
    int x=1,y=12;
    x+=2;
    y-=3;
    System.out.println();
    System.out.println("x= "+x+" y= "+y);
    y/=x;
    System.out.println("x= "+x+" y= "+y);
    y++;
    y%=x;
    System.out.println("x= "+x+" y= "+y);
  }
}


三目运算符
Java中的三墓运算符与C语言中的完全相同,使用形式为:
x?y:z;
这就是说,先计算x的值,若x为真,怎整个表达式的结果为y的值,若x为假,则整个表达式的值为表达式z的值。
例如:
int x=5,y=8,z=2;
int k=x<3?y:z; //因为x<3,所以k=z=2;
int j=x>0?x:-x //y的值始终为x的绝对值。


作者: 冯瑞君老师    时间: 2011-12-21 09:51
< 小于 > 大于 <= 小于或等于 >= 大于或等于
  == 等于 != 不等于  && 而且  and 而且  || 或者  ! 非 位运算符
包括位移运算和位逻辑运算。

位移运算符
>;>;右移、<<左移、>;>;>;无符号右移
->;     
位逻辑运算
&与、|或、^异或、~非运算,这于其他的编程语言类似,不再详述。
逻辑运算符
与&&、或||
作者: 陈帅雷    时间: 2011-12-21 13:19
回答的真详细呀{:soso_e100:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2