Java运算符共包括这几种:算术运算符、比较运算符、位运算符、逻辑运算符、赋值运算符和其他运算符。(该图来自网络)
简单的运算符,就不过多介绍使用了,可自行测试。关于赋值运算,可以结合算术运算和位运算来简化代码。
int a = 5;
a += a; // a = a + a;
a -= a; //a = a - a;
a /= a; // a = a / a;
a %= a; // a = a % a;
a &= 6; // a = a & 6;
//.....
理解自增自减运算符
自增自减分为前置和后置。例如:i++ ++i i-- --i。 要明确一点,前置与后置的自增或自减如果没有运用到表达式运算中,那么是没区别的,若是参与到表达式的运算中,只需记住:谁在前面就先执行谁。
int a = 0; a++; //或者++a System.out.println(a); // a输出1
//最常见的for循环中,在迭代条件中,i++ 和 ++i无区别,因为没有用于表达式。
将前置自增和后置自增运用到表达式中。
int a = 5; System.out.println(a--); //5,先打印a的值,之后a自减1 System.out.println(a); //4 System.out.println(++a); //5, 先对a值自增,然后打印a值
复杂一点,更好的理解前置和后置的区别:
int a = 6; int b = 8; int c = ++a + b-- - a-- + --b + b++ + --a; System.out.printf("%d|%d|%d", a,b,c); // 5,7,25
使用图片来理解会更加一目了然。
再随便给一个,按照图示方式去理解自增自减。
int a = 6,b = 8; int c = (--a) + (a--) - (b--) + (++b) + (a++) - (b--); //加括号更容易阅读 // int c = --a + a-- - b-- + ++b + a++ - b--; System.out.printf("%d|%d|%d", a,b,c); // 5,7,6 }
在Java中,位运算常用的就是移位运算了。所以会按照个人的理解去回顾这个知识点,不会太深入。如果对位运算感兴趣的可以去其他博客搜搜,讲解非常详细。
移位运算所进行的操作是在二进制的基础之上对数字进行平移,有左移运算和右移运算。
给一个代码例子:
//测试右移位运算
//结果是1 和 0
System.out.println(6>>2); //6右移2位
System.out.println(8>>5); //8右移5位
本质是二进制的运算,所以我们将6 和 8转成二进制。
如果不懂二进制也可以使用电脑自带的计算器,改成程序员用的就可以了。但建议一定要学会二进制,并且熟练与八进制和十六进制的转换,会让你更明白计算机原理。
进入正题:
//6的二进制
0000 0000 0110
0000 0000 0001 //右移2位
//1 乘以2的0次方 输出1
//8的二进制
0000 0000 1000
0000 0000 0000 //右移5位
//0乘以2的0次方 输出0
//测试左移运算
//结果为128 192
System.out.println(4<<5);
System.out.println(3<<6);
//4的二进制
0000 0100
1000 0000 //左移5位
//1乘以2的7次方 输出128
//3的二进制
0000 0011
1100 0000 //左移6位
//1乘以2的7次方 + 1乘以2的6次方 输出192
上面是以二进制的平移方式来得出的,还有取巧的方式,计算2的次方非常迅速。
就是:左移几位就乘以2的几次方 , 右移几位就除以2的几次方
以 4<<5 为例 : 就是4 乘以 2 的5次方 4 * 32 可以很快得出结果128
10>>2 : 10除以 2的2次方 10/4 = 2
要想得到2的10次方 只需要 1<<10 即可。
--------------------------------------------------------------------------------------------------------
关于下图的Java运算符,不需要去记优先级,使用括号运算符能更好的增加可读性。