Java的表达式和运算符

一、算术运算符


运算符


+


-


*


/


%


说明






取模(余数)


例子


1+2


5-3


20*5


6/4


30%9


结果


3


2


100


1


3

int x = 10;
int y = 6;
int result=x/y;
System.out.println(result);

其结果是1,不会带有小数部分,也就是整数运算后的到的结果也是整数,不会自动变成浮点数。

上面所具的例子都是表示二元运算符,也就是说有两个运算参数,其中“+”和“-”两个符也可以表示一元运算符,分别表示正数和负数这些运算符也可以组合成为一个复杂的运算式子,如下面这个例子:

int x = 10,y = 6,a = 20,b = 2;
int result=-x/y+a-b+a%x+-a;
System.out.println(result);

上面示例会先计算小括号的x+y和a-b两个式子,然后在按照先先乘除后加减,从左到右的计算顺序。

二、赋值运算符


运算符


=


+=


-=


*=


/=


++


--


说明


赋值


加等于


减等于


乘等于


除等于


自增1


自减1


例子


x=10


x+=y;


y-=5;


y*=z-3;


z/=3;


y++;


x--


等价于

 
x=x+y;


y=y-5;


y=y*(z-3);


z=z/3;


y=y+1;


x=x-1;

程序中“=”的意义与我们平时的数学计算的式子不同,他表示赋值的意思,就是把赋值表达式中右边的计算结果赋值左边的变量中。如下面这里例子都是赋值运算:

int x=5; //用专业的说法是把右边5的值赋值给左边的int变量x
int y=x=6; // y和x都赋值6;
int a;
a=100+200;

在赋值运算时,经常会出现左边的变量重复出现在赋值表达式的右边,如:

int a=100;
a=a+200;
a=a+200;

等价于以下形式:
a+=200;

归纳一下也就是,如果expr1和expr2分别代码两个表达式,op代表运算符号,那么:

expr1=(expr1) op (expr2)

等价于

expr1 op= expr2;

注意第一个表达式,有时候括号是不可缺少的,比如以下这个例子:

int a=10,b=3;
a*=b+1;

其意思是:

a=a*(b+1);

而不是:

a=a*b+1;

三、自增1和自减1

我们要实现一个数的自增1或者自减1,目前可以有以下两种方法:

a=a+1或者a+=1;

a=a-1或者a-=1;

但是由于在编写程序时自增1或者自减1用得非常频繁,java语言提供了两个专门用于变量的自增1和自减1的特殊运算符,其中++是自增1运算符号,可以使操作数自增1,--是自减1运算符号,可以使操作数自减1。比如下面这个例子就是自增1:

int i=1;
i++;
System.out.println(i);//结果是2

需要特别留意的是++和--运算符可以前置、后置,都是合法的语句,如a++和++a都是合法的,上面这两种写法其最终的结果都是是变量a的值加1了,但是它们之间也是有区别的,其区别是:表达是++a会先将a的值自增1,然后在使用变量a。而表达式a++是先使用了a的值,然后再让a的值自增1。也就是说在一些表达式,使用a++和使用++a得到的结果时不一样的。例如:

int a=1;
int b= a++;
System.out.println(b);//这时候b是1
int a=1;
int b= ++a;
System.out.println(b);//这时候b是
int a=1,b=1,c;
c=++a+b++;
System.out.println("a="+a);
System.out.println("b="+b);
System.out.println("c="+c);  //c最后的值是3

最后再提一下++和--两个运算符都只能作用于变量,而不作用域表达式。如下面这个例子是非法的。

int a=1,b=1;
 (a+b)++;

四、比较运算符

比较运算符也称为关系运算符,用于测试两个操作数之间的关系。使用关系运算符表达式的最终结果为 boolean 型,也就是其结果只有两个true和false。具体运算符号如下表所示:


运算符


==


!=


>


<


>=


<=


比较


等于


不等


大于


小于


大于等于


小于等于


例子


i==1;


i!=1;


i >1;


i<1;


i>=1;


i<=1;


结果


true


false


false


false


true


true

由上表所示,我们判断两个数是否相等使用两个等号(==),它与(!=)具有相同的优先级。比>、<、>=、<=的优先级要高,但是算术运算符的优先级比关系运算符高,也就是说i<a+100和i<(a+100)等结果都是一样。不同数据类型之间也可以进行比较,它们会被自动转换为相同的类型后再比较,如以下例子:

int x = 10;
float y=10.9f;
char a=‘0‘;
System.out.println(x>y);
System.out.println(a>x);

五、逻辑运算符


运算符


&


|


!


&&


||


说明





阻断与


阻断或


示例


true&false


True|false


!false


true&&false


true||false


结果


false


true


true


false


true

逻辑运算符非常重要,尤其是在学习了后面的条件判断后,会大量使用这些逻辑运算符。

1、与运算

与运算符号有&和&&两个,表示必须两个条件都为true时,结果才能返回true。如:

(1>2)&&(1>3) (1>2)&&(3>1) (2>1)&&(1>3) (2>1)&&(3>1)

其对应比较运算过程就是

false&&false false&&true true&&false true&&true

也就是最后的结果就是前面三个的返回都是false,只有最后一个是true。

2、或运算

或运算符号有|和||两个,表示两个条件只要有一个满足为true,最后结果返回true。还是以上面例子说明如:

(1>2)&&(1>3) (1>2)&&(3>1) (2>1)&&(1>3) (2>1)&&(3>1)

其对应比较运算过程就是

false&&false false&&true true&&false true&&true

也就是最后的结果就是第一个返回为false,后面三个返回都是true。

3、取反运算符

取反运算符只有一个!,它是单元运算符,这个比较简单,如果是true就返回false,false就返回true,如下面的示例:

!(1>2) !(2>1)

其对应比较运算过程就是

!false !true

所以第一个返回是true,第二个返回是false。

4、组合的逻辑运算符

逻辑符可以组合使用,并结合上面比较运算符,形成一个复杂的条件判断,比如下面这个判断是否是闰年的条件判断式,闰年的判断条件是,如果此年份是4的陪数,但不是100的陪数,那么就是闰年,如果是100的陪数,还要是400的倍数才是闰年,实现代码如下:

  int year=2008;
   boolean result=year%4==0&&year%100!= 0||year % 400 == 0;

5、 &和&&、|和||的区别

参与运算的都是boolean布尔类型,在上表中的逻辑运算符&和&&、|和||的示例中,结果的都是一样的,但是在运算时却有区别。&&和||有一些比较特殊的属性,其运算的顺序是从左至右进行判断的,但是对&&而言如果在判断时得到的结果是false时,那么后面的计算就不会继续,对||而言,如果在判断时得到的结果是true,那么后面的计算也不会继续,这种机制称之为阻断判断或者短路判断,在有些情况之下,这种机制可以提高程序运行的效率。

int x=1,y=2;
boolean b;
b=x>y&&++x==--y;

b, x, y的值分别是false, 1, 2。x和y虽然上面都有自增和自减的表达式,但是却并没有执行,那是因为x>y的结果是false,后面使用了短路判断&&,所以不管后面的表达式的结果是什么,最后的结果必然是false,所以后面的++x和--y其实都没有执行过,如果改成以下例子:

int x=1,y=2;
boolean b;
b=x>y&++x==--y;

因为使用了&符号,所以b, x, y的值是false, 2, 1了。

六、条件运算符

java的条件运算符是三元运算符,也就是说有三个参数参与运算,其功能是对表达式条件进行判断,根据判断结果是true或者false两种情况赋予赋予不同的返回值,其语法如下:

表达式?值1:值2;

int a=2;
int b=1;
int c=(a>b)?3:4;
System.out.println(c);

七、位运算符

位运算符在java的企业应用中使用的频率并不高,但是在一些追求效率和编写底层应用时,还是会用到位运算符,前面介绍的各种运算都是基本都是以字节作为最基本位进行运算的,而位运算符是以位(bit)作为运算单位的,所以要弄明白位运算符,必须要知道二进制表示法。

int a=1;//int 是 32 位 取最后的8位是 00000001按位位与运算符"&"就是实现参与运算的两个数对应的二进制位数执行与的操作。如果两个二进位均为1时,结果位才为1,否则就为0。前面介绍过,计算机都是采用补码的方式运行的,所以参与运算的数都是补码方式进行的。如下面所示例子:

1、按位与

int b=5;//int 是 32 位 取最后的8位是 00000101
System.out.println(a&b);//结果是 00000001

如代码所示00000001和00000101运算的结果是00000001。所以最后输出的结果是1 。

2、按位或

按位或运算符“|”就是实现参与运算的两个数对应的二进制位数执行或的操作。如果两个二进位均为0时,结果位才为0,否则就为1。我们继续以上面所示的例子:

int a=1;//int 是 32 位 取最后的8位是 00000001
int b=5;//int 是 32 位 取最后的8位是 00000101
System.out.println(a|b);//结果是 00000101

如代码所示00000001和00000101运算的结果是00000001。所以最后输出的结果是5。

3、按位异或

按位异或运算符“^”就是实现参与运算的两个数对应的二进制位数执行异或的操作。如果两个二进位相同时,结果位为0,不同时就为否1,简称“同0异1”。也就是说两个都是1或者两个都是0时结果为0,否则为1。还是以上面作为例子

int a=1;//int 是 32 位 取最后的8位是 00000001
int b=5;//int 是 32 位 取最后的8位是 00000101
System.out.println(a^b);//结果是 00000100

如代码所示00000001和00000101运算的结果是00000100。所以最后输出的结果是4

4、求反

求反运算符只是单目运算符,具有右结合性,这个功能比较简单,就是对参与运算的数的各二进位按位求反。但是这个结果需要补码的运算有所了解才行。

//int 是 32 位  对应二进制就是 00000000 00000000 00000000 00000001
int a=1;
//结果也是 32 位 对应的二进制是 11111111 11111111 11111111 11111110
System.out.println(~a);

因为部门的第一位是符号位,按照补码的运算,对应的结果就是-2了。

5、左移

左移运算符“<<”其功能把“<<”左边的运算数的各二进位根据右边定义的数量全部左移若干位,移动的数位由右边所定义的数量决定。 移动时依据高位丢弃,低位补0的原则。

int a = 2;//int 是 32 位 取最后的8位是 00000010
System.out.println(a<<1);//左移一位后就是 00000100

最后输出的结果是4,由上面的示例可知,每左移一位后,所得到的结果就是原来的数据乘以2,所以很多时候我们在做乘以2的操作是都是使用这个左移操作,以提高效率。

6、右移

右移运算符“>>”其功能把“>>”左边的运算数的各二进位根据右边定义的数量全部右移若干位,移动的数位由右边所定义的数量决定。 也是按照移动时依据高位丢弃,低位补0的原则。

int a = 12;//int 是 32 位 取最后的8位是 00001100
System.out.println(a>>2);//左移一位后就是 00000110

结果是3,由上面的示例可知,和左移正好相反,每右移一位后,所得到的结果就是原来的数据除以2,所以很多时候我们在做除以2的操作是都也是使用这个由移操作,以提高效率。

原文地址:https://www.cnblogs.com/weibanggang/p/11128397.html

时间: 2024-10-08 20:25:23

Java的表达式和运算符的相关文章

python学习笔记表达式和运算符(一)

表达式和运算符 什么是表达式? 1+2*3 就是一个表达式,这里的加号和乘号叫做运算符,1.2.3叫做操作数.1+2*3 经过计算后得到的结果是7,就1+2*3 = 7.我们可以将计算结果保存在一个变量里,ret = 1-2*3 . 所以表达式就是由操作数和运算符组成的一句代码或语句,表达式可以求值,可以放在"="的右边,用来给变量赋值. 算术运算符 : + - * / //(取整除) %(取余) ** >>> 2+3 >>> 3-2 >>

JavaScript学习笔记【2】表达式和运算符、语句、对象

笔记来自<JavaScript权威指南(第六版)> 包含的内容: 表达式和运算符 语句 对象 表达式和运算符 数组直接量中的列表逗号之间的元素可以省略,这时省略的空位会填充值undefined.元素列表末尾可以留下单个逗号,这时并不会创建一个新的值为undefined元素. 属性访问表达式,.identifier的写法只适用于要访问的属性名称是合法的标识符,并且需要知道要访问的属性的名字.如果属性名称是一个保留字或者包含空格和标识符,或是一个数字(对于数组来说),则必须使用方括号的写法.当属性

JavaScript权威指南第04章 表达式和运算符

www.qdmm.com/BookReader/1845423,31051137.aspx www.qdmm.com/BookReader/1845423,31073665.aspx www.qdmm.com/BookReader/1845423,31088923.aspx www.qdmm.com/BookReader/1845423,31104070.aspx www.qdmm.com/BookReader/1845423,31114804.aspx www.qdmm.com/BookRea

第八章 表达式和运算符

表达式和运算符 表达式字面量 整数字面量实数字面量字符字面量字符串字面量 求值顺序 优先级结合性 简单算术运算符求余运算符关系比较运算符和相等比较运算符递增运算符和递减运算符条件逻辑运算符逻辑运算符移位运算符赋值运算符 表达式和运算符 表达式 本章将定义表达式,并描述C#提供的运算符. 运算符是一个符号,它表示返回单个结果的操作.操作数(operand)指作为运算符输入的数据元素.一个运算符会: 将操作数作为输入 执行某个操作 基于该操作返回一个值 表达式是运算符和操作数的字符串.可以作为操作数

JS学习第六天----表达式和运算符

表达式和运算符 1.如果不清楚运算符的优先级,最简单的办法就是使用括号来明确表明计算顺,赋值操作的优先级很低,几乎自后才被执行 2.如果"+"运算符表达式中一个是字符串,而另一个不是,则另一个会被自动转换为字符串. 如果加号运算符中一个运算数为对象,则这个对象会被转换为可以进行加法运算的数字或可以进行连接运算的字符处澳门,这一转换是通过调用该对象的valueof()或toString()方法来实现的. 3.如果"-"运算符的运算数字不是数字,那么系统会自动把它们转换

JavaScript 精粹 基础 进阶(2)表达式和运算符

转载请注明出处 原文连接 http://blog.huanghanlian.com/article/5b698e88b8ea642ea9213f4a 表达式和运算符 JavaScript 表达式 表达式是指能计算出值得任何可用程序单元.--Wiki 表达式是一种JS短语,可使JS解释器用来产生一个值.--<JS权威指南> JavaScript 运算符 三元运算符 c ? a : b var val = true ? 1 : 2; // val = 1 //val值为true就会返回冒号前面的值

表达式和运算符

1.原始表达式 最简单的表达式是“原始表达式”.原始表达式是表达式的最小单位——它们不再包含其他表达式JavaScript中的原始表达式包含常量或直接量.关键字和变量 例如: 1.23//数字直接量 “hello”//字符串直接量 true //保留字 undefined //变量 2.对象和数组的初始化表达式 对象和数组初始化表达式实际上是一个新创建的对象和数组 数组初始化表达式: var p=[1,3,5,6,8]; var p=[[1,2,3],[4,5,6],[7,8,9]]; var

第4章 表达式和运算符

表达式(expression)是JS中的一个短语,JS解释器会将其计算(evaluate)出一个结果 4.1 原始表达式 4.2 对象和数组的初始化表达式 4.3 函数定义表达式 4.4 属性访问表达式 4.5 调用表达式 4.6 对象创建表达式 4.7 运算符概述 4.8 算术表达式 4.9 关系表达式 4.10 逻辑表达式 4.11 赋值表达式 4.12 表达式计算 4.13 其他运算符

2、JS中的表达式和运算符

一.表达式 1.原始表达式:2.14,“test”,true/false,null……复合表达式:10*20…… 2.数组.对象的初始化表达式:new Array(1,2),[1,undefined,4],{x:1,y:2}=>var o = new Object();o.x=1;o.y=2;…… 3.函数表达式:var fe = function(){}; (function(){console.log('hello');})()…… 4.属性访问表达式:var o = {x:1}; o.x;