1.Java中的算术运算符
运算符就是对常量和变量进行操作的符号,运算符分为:
- 算数运算符
- 赋值运算符
- 比较运算符
- 逻辑运算符
- 位运算符
- 三元运算符
算数运算符分为:+,-,*,/,%,++,–,其中除法得到的是商。
三元运算符例子:
class Hello
{
public static void main(String[] args)
{
int a=9;
int b=10;
int max=(a>b)? a:b;//需要注意的是a和b之间的是冒号
System.out.println(max);
}
}
运行结果为:
---------- 运行 ----------
10
输出完成 (耗时 0 秒) - 正常终止
2.java中的++(自加)和–(自减)的用法是:++a是先加后用,a++是先用后加。–同理。
class Hello
{
public static void main(String[] args)
{
int a=5;
int b=4;
int c = (++a)*(b++)+b;
System.out .println(a);
System.out .println(b);
}
}
运行结果:
---------- 运行 ----------
6
5
输出完成 (耗时 0 秒) - 正常终止
3.赋值运算符
需要注意的是赋值运算左边的数据必须是一个变量。a=a+b;可以写成a+=b;
4.关系运算符(计算出的结果只会是boolean类型的)
class Hello
{
public static void main(String[] args)
{
boolean flag = (4>3);
System.out .println(flag);
}
}
运行结果:
---------- 运行 ----------
true
输出完成 (耗时 0 秒) - 正常终止
5.逻辑运算符
逻辑运算符都有&(并且),|(或者),!(非),^(异或),&&(短路与),||()短路或。
需要注意的是: 算术表达式: a + b,关系表达式:a == b(是判断这两个数是否相等,而不是把a赋给b)。
逻辑运算符的结论为:
- 逻辑与(&):有fasle则为false
- 逻辑或(|) :有true则为true
- 逻辑异或(^):相同为false相同怎为true
- 逻辑非(!):非false则为true,非true则为false
6逻辑运算符&&和&的区别
- 首先运行的结果是相同的
- &&具有短路效果,而&没有短路效果。
可以用一段代码具体看看它们之间的区别
package os.westos.Test4;
public class boke1 {
public static void main(String[] args) {
int a = 1;
int b = 1;
if(a++==2&++b==2){
a = 7;
}
System.out.println("a="+a+",b="+b);
}
}
运行结果为:a=2,b=2
再看&&(具有短路效果的)
package os.westos.Test4;
public class boke1 {
public static void main(String[] args) {
int a = 1;
int b = 1;
if(a++==2&&++b==2){
a = 7;
}
System.out.println("a="+a+",b="+b);
}
}
运行结果为:a=2,b=1
7位运算符的用法
位运算符都有&(与),|(或),^(异或),<<(左移),>>(右移),>>>(无符号右移).
这里需要注意的是:位运算符是直接对二进制补码进行计算。
位运算符的结论为:
- &:有 0 则 0
- |:有1 则 1
- ^:相同则为0 ,不同则为 1(特点:一个数被另一个数据异或两次或者2的偶数倍,那么该数不发生该改变。)
- ~:按位取反
在位运算符中
<<:左移 空位补0,被移除的高位丢弃。
>>:右移 被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,高位补1。
>>>:无符号右移 被移位二进制最高位无论是0或者是1,空缺位都用0补。
结论:
<< : 把<<左边的数据乘以2的移动次幂 例如 10<<3 结果 10*2^3=80(运行速度很快)
>> : 把>>左边的数据除以2的移动次幂 例如 40>>3 结果 40/2^3=5(运行速度很快)