【前置知识】
Java 语言支持如下运算符(operator):
- 算术运算符: +,-,*,/,%,++,–
- 赋值运算符 =
- 关系运算符: >,<,>=,<=,==,!= instanceof
- 逻辑运算符: &&,||,!
- 位运算符: &,|,^,~ , >>,<<,>>> (了解!!!)
- 条件运算符 ?:
- 扩展赋值运算符:+=,-=,*=,/=
1.二元运算
(1)整型运算
如果两个操作数有一个为Long, 则结果也为long;
没有long时,结果为int。即使操作数全为shot,byte,结果也是int.
(2)浮点运算
如果两个操作数有一个为double, 则结果为double.
只有两个操作数都是float, 则结果才为float.
2.取模运算
(1)操作数可以是浮点数,但一般为整数。
(2)取模运算的操作结果的符号取决于第一个操作数:
public static void main(String[] args) {
System.out.println(9 % 4); //1
System.out.println(-9 % -4); //-1
System.out.println(-10 % 4); //-2
System.out.println(9 % -4); //1
}
3.一元运算
(1)自增(++)和自减(–);
(2)有前缀和后缀之分:
前缀:先自增/减,再代入表达式。
后缀:先代入表达式,再对变量自增/减。
(3)Java中的乘幂运算
并不是^,这是逻辑异或。
Math类提供了很多科学和工程计算需要的方法和常数。特殊的运算都需要运用到方法!
public static void main(String[] args) {
int a = 3^2; //java中不能这么处理, ^是异或符号。
double b = Math.pow(3, 2);
}
【面试题】
计算2*8的最快速方法(运算效率最快)?
public static void main(String[] args) {
System.out.println(2 << 3);
}
用移位运算 int a=2<<3;
a就是2乘以8 最后结果是16 这是最省内存 最有效率的方法。
知识:在现代架构中, 情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算).。详细的需要了解计算机的组成原理!
4.逻辑运算
【注意】逻辑与和逻辑或采用短路的方式。从左到右计算,如果确定值则不会再计算下去。
逻辑与只要有一个为false, 则直接返回false.
逻辑或只要有一个为true, 则直接返回true。
public static void main(String[] args){
int a = 5;//定义一个变量;
boolean b = (a<4)&&(a++<10);
System.out.println("使用短路逻辑运算符的结果为"+b);
System.out.println("a的结果为"+a);
}
5.位运算
(1)位运算符作用在所有的位上,并且按位运算。
(2)
右移一位相当于除2取商;
左移一位相当于乘2。
(见上面面试题)
6.字符串连接符
“+” 运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串然后再进行连接。
(个人觉得,这条应该加到自动类型转换里去)
7.【总结】
实际在Java运算的时候是很综合的一件事情,
要综合考虑很多东西。
例如,翻转任意三位数。
class Solution {
public:
/**
* @param number: A 3-digit number.
* @return: Reversed number.
*/
int reverseInteger(int number) {
// write your code here
return number/100+number/10%10*10+number%10*100;
}
};
【小结】
(0)两个int型相除,结果仍然是int型。(你得知道这点才能考虑后面的)
(1)如何得到一个数的各个位数?
(利用好取余%运算和除法运算/)
(2)数的表示:
位数*对应的加权(不同数制加权不同)之和。