导图社区 Java运算符与表达式
JAVA运算符:不同长度的数据进行位运算:如果两个数据长度不同如(byte型和int型),对它们进行位运算时,如a&b,a为byte型b为int型,则系统首先会将a的左侧24位拉满。若a为正则填满0,若a为负责填满1。
编辑于2022-08-04 10:26:57 贵州微信小程序开发知识整理,系统地介绍了微信小程序开发的基础知识,帮助开发者更好地理解和掌握小程序开发的要点和流程。
SpringFramework技术的介绍,SpringFramework,通常简称为Spring,是一个开源的企业级Java应用程序框架,由Rod Johnson创建,并于2004年首次发布。Spring Framework的主要目标是简化企业级Java开发,提高开发效率和应用程序的可维护性。
Maven的特性以及使用部署方法,Maven介绍:Maven是一款为Java项目构建管理、依赖管理的工具(软件),使用Maven可以自动化构建、测试、打包和发布项目,大大提高了开发效率和质量。
社区模板帮助中心,点此进入>>
微信小程序开发知识整理,系统地介绍了微信小程序开发的基础知识,帮助开发者更好地理解和掌握小程序开发的要点和流程。
SpringFramework技术的介绍,SpringFramework,通常简称为Spring,是一个开源的企业级Java应用程序框架,由Rod Johnson创建,并于2004年首次发布。Spring Framework的主要目标是简化企业级Java开发,提高开发效率和应用程序的可维护性。
Maven的特性以及使用部署方法,Maven介绍:Maven是一款为Java项目构建管理、依赖管理的工具(软件),使用Maven可以自动化构建、测试、打包和发布项目,大大提高了开发效率和质量。
Java运算符与表达式
一、 算数运算符
1. 定义
算数运算符作用于整形或浮点型数据,完成算术运算
2. 类型
1||| 双目算术运算符
加(+)
Java对加运算符进行了扩展,使它能够进行字符串的连接,如“abc”+“de”得到字符串“abcde”
减(-)
乘(*)
除(/)
取模(%)
取模运算符的操作数可以是浮点数,例如37.2%10=7.2
2||| 单目运算符
正值(+)
用法
+op
负值(-)
用法
-op
op表示操作数
加一(++)
i++与++i的区别;i++在使用i之后,使i的值加1,因此执行完i++后,整个表达式的结果仍为i,而i的值变成了i+1.++i在使用i之前,使i的值加1,因此执行完++i后,整个表达式和i的值均为i+1.例如初始值a=1,b=1;执行a=b++后,a的值为1,b的值为2;而执行a=++b后,a和b的值均为2
减一(--)
3||| 关系运算符
大于(>)
op1>op2
大于或等于>=
op1>=op2
小于<
op1<op2
小于或等于<=
op1<=op2
(等于)==
op1==op2
(不等于)!=
op1!=op2
关系运算符用来比较两个值的大小关系,返回布尔值true或false。关系运算符都是双目运算符
4||| 逻辑运算符
与(&&)
op1&&op2
或(||)
op1||op2
非(!)
!op1
5||| 位运算符
按位取反(~)
~op
按位与(&)
op1&op2
按位或(|)
op1|op2
按位异或(^)
op1^op2
右移(>>)
op1>>op2(op1右移op2位)
左移(<<)
op1<<op2
无符号右移(>>>)
op1>>>op2
位运算符用来对二进制位进行操作
6||| 赋值运算符
=
赋值运算符把一个数据赋给一个变量,在赋值运算符两侧的类型不一致的情况下,如果左侧变量的数据类型的级别高,则右侧的数据被转化为与左侧相同的数据类型,然后赋给左侧变量,否则,需要使用强制类型转换运算符
例如: byte b=100; int i=b; int i=100; //自动转换 byte b=(byte)i; //强制类型转换
7||| 扩展赋值运算符
+=
op1+=op2(op1=op1+op2)
-=
op1-=op2(op1=op1-op2)
*=
op1*=op2(op1=op1*op2)
/=
op1/=op2(op1=op1/op2)
%=
op1%=op2(op1=op1%op2)
&=
op1&=op2(op1=op1&op2)
| =
op1|=op2(op1=op1|op2)
^=
op1^=op2(op1=op1^op2)
>>=
op1>>=op2(op1=op1>>op2)
<<=
op1<<=op2(op1=op1<<op2)
>>>=
op1>>>=op2(op1=op1>>>op2)
8||| 条件运算符
?:(三元运算符)
一般形式:expression?statement1:statement2;expression的值应为一个布尔值,如果该值为true则执行statement1,否则执行语句statement2,statement1和statement2需要返回相同的数据类型,且该类型不能为void。例如: max=a>b?a:b ,如果a>b则max=a否则max=b
二、 位运算符的应用
1. 补码
Java 使用补码来表示二进制数,在补码表示中,最高位为符号位,正数的符号位为0,负数为1;补码的规定如下:对正数来说,最高位为0,其余各位代表数值本身(以二进制表示),如+42的补码为00101010。对负数而言,把该数绝对值的补码按位取反,然后对整个数加1,即得到该数的补码。如-42的补码为11010110(00101010按位取反11010101,加一后11010110)
2. 按位取反运算符(~)
~是单目运算符,对数据的每个二进制位取反,即把1变成0,把0变成1.例:~0010101=1101010
3. 按位与运算符(&)
如果参与运算的两个值相应位都为1,则运算后该位的结果为1,否则为0.即: 00101010 (&)00010111 ———————— 00000010
按位与可以用来对某些特定的位清零(将特定位与0相与其余位补1),也可以用来取某些特定位(将特定位与1相与其余位补0)
4. 按位或运算符(|)
参与运算的两个值,只要两个相应位中有一个为1,则该位的结果为1.即:0|0=0,0 |1=1,1 | 1=1
可以使用按位或将某些特定位置置为1.例: 00101010 (|)00010111 ———————— 00111111
5. 按位异或运算(^)
参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。即: 0^0=0, 1^0=1, 0^1=1, 1^1=0
按位异或可以用来使某些特定的位翻转,如对数11010110的4位和5位翻转可以将之与数00011000进行按位异或运算 11010110 (^)00011000 ———————— 11001110
6. 左移运算符<<
用于将一个数的各二进位左移若干位。例如a=a<<2.使得a的各二进制位左移2位,右补0,若a=00001111,则a<<2=00111100.高位左移后溢出,舍弃不起作用
7. 右移运算符>>
用来将一个数的各二进制位全部右移若干位。例如:a=a>>2,使a的各二进制位右移2位,移到右端的地位被舍弃,最高位则移入原来高位的值。如a=00110111,则a>>2=00001101 ,b=11010011,则b>>2=11110100
8. 无符号右移运算符>>>
用来将一个数的各二进制位无符号右移若干位,与>>运算符相同,移出的低位被舍弃,与右移运算符不同的是,最高位补0
9. 不同长度的数据进行位运算
如果两个数据长度不同如(byte型和int型),对它们进行位运算时,如a&b,a为byte型b为int型,则系统首先会将a的左侧24位拉满。若a为正则填满0,若a为负责填满1
10. 位运算的应用
位运算可以用来处理一组布尔标志。如果一个程序中有几个不同的布尔标志分别代表对象的几个性质的状态,则可以把它们放在一个变量中,通过对该变量进行位操作实现对各布尔变量的访问。
public class Test01 { static String binary[]={"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"}; static final int FLAG1=1; //设定常量FLAG1为0x0001 static final int FLAG2=2; //设定常量FLAG2为0x0010 static final int FLAG3=8; //设定常量FLAG3为0x1000 public static void main(String[] args) { int flag=0; //flag的值为0x0000 System.out.println("清除所有flag的值:"+binary[flag]); flag=flag|FLAG3; //或运算 System.out.println("设置flag的值为:"+binary[flag]); flag=flag^FLAG1; //与FLAG1异或运算 System.out.println("flag异或运算的结果为:"+binary[flag]); flag=flag^FLAG2; //与FLAG2异或运算 System.out.println("flag异或运算的结果为:"+binary[flag]); flag=flag&FLAG1; //与运算 System.out.println("flag与运算的结果为:"+binary[flag]); int y=~FLAG1; //非运算 flag=flag&y; System.out.println("flag非运算的结果为:"+binary[flag]); flag=flag|FLAG3; System.out.println("flag或运算的结果为:"+binary[flag]); flag=flag>>>3; //无符号右移3位 System.out.println("flag无符号右移后的结果为:"+binary[flag]); } }
三、 表达式
表达式是变量、常量、运算符、方法调用的序列,它执行这些元素指定的计算并返回某个值。如a+b、c+d等都是表达式,表达式用于计算并对变量赋值,以及作为程序控制的条件。表达式的值由表达式中的各个元素来决定,可以是简单类型,也可以是复合类型,在对一个表达式进行运算时,要按照运算符的优先顺序从高到低进行,同级的运算符则按照从左到右的方向进行,运算符优先级如下从上到下优先级逐级递减
1.
1||| .
2||| 【】
3||| ()
2.
1||| ++
2||| --
3||| !
4||| ~
5||| instanceof
3. new(type)
4.
1||| *
2||| /
3||| %
5.
1||| +
2||| -
6.
1||| >>
2||| >>>
3||| <<
7.
1||| <
2||| >
3||| <=
4||| >=
8.
1||| = =
2||| !=
9. &
10. ^
11. |
12. &&
13. | |
14. ?:
15.
1||| =
2||| +=
3||| -=
4||| *=
5||| /=
6||| %=
7||| ^=
16.
1||| &=
2||| | =
3||| <<=
4||| >>=
5||| >>>=