运算符与表达式
算术运算符
算术操作符:+,-,*,/,%,++,–表示加减乘除,取余(求模),自增和自减 /运算,两个操作数都是整数时,表示整数除法 否则,表示浮点除法 整数被0除将产生一个异常,浮点数被O除得到无穷大或者NaN
public class Test{
public static void main(String[] args){
int i = 3;
int j = 2;
System.out.println(i/j);
double k = 2;
System.out.println(i/k);
}
}
int i = 3;
int i2 = i++;
System.out.print("i=" + i);
System.out.print("i2=" + i2);
关系运算符、逻辑运算符
关系运算符,求值结果为布尔型 ==检测是否相等 ,如3 ==7的值为false !=检测是否不等,如3!7的值为true
三元运算符
condition ? exp1 : exp 2
condition为真是计算exp1的值,为假时计算exp2的值。
public class Test{
public static void main(String[] args){
int score = 80;
String isOk = score >=60 ? "及格" : "不及格";
String isOk = score >=60 ? (score >=85 ? "优秀":"合格") : "不及格";
System.out.println("score=" +score+ "时,我们认为成绩:"+isOK);
}
}
位运算符
在处理整形数值时,可以直接对组成整形数值的各个位进行操作。这意味着可以使用屏献技术获得整数中的各个位
位运算的奇巧淫技
2->8最高效的方式? 答:2<<2
判断奇偶数
只需要判断最低位是0是1即可 与1做与运算
public class Test{
public static void main(String[] args){
int num = 99;
System.out.println(num + "是" +(((num&1)==0 ? "偶数" :"奇数")));
}
}
获取二进制为是1还是0(两种方案)
例如给定 x = 86 问第五位是1还是0?
方案1:先把1左移四位与x做与运算,然后把结果第5位右移四位,看是0还是1
System.out.println(num + "二进制数的第5位是:" +(((num &(1<<4))>>4)==0 ? "0" :"1"));
System.out.println(num + "二进制数的第5位是:" +(((num>>4)&1)==0)?"0":"1");
交换两个整数变量的值
对于任何数x,都有x^x=0, x^0=x 同自己求异或为0,同0求异或为自己
int num1 = 10;
int num2 = 20;
num1 = num1^num2;
num2 = num1^num2;
num1 = num1^num2;
System.out.println("num1=" + num1 +",num2=" + num2);
不用判断语句,求整数的绝对值
与-1做异或相当于取反
num2 = -20;
System.out.println("num2的绝对值为"((num2^(num>>31))+(num2>>>31)));
赋值运算符
当“=”两侧数据类型不一致时,可以使用默认类型转换或使用强制类型转换进行处理 注意:可以将整型常量直接赋值给byte,short, char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围
类型转换
java数据类型转换分为
自动类型转换
强制类型转换
byte,char和short 型参与运算时自动提升为int型
对于表达式
- 如果一个操作数为long型,则整个表达式提升为long型
- 如果一个操作数为float型,则整个表达式提升为float型
- 如果一个操作数为double型,则整个表达式提升为double型
public class case2_Time {
public static void main(String[] args) {
long m = System.currentTimeMillis();
long totalSecond = m / 1000;
long second = totalSecond % 60;
long totalMinute = totalSecond / 60;
long minute = totalMinute % 60;
long totalHour = totalMinute / 60;
long hour = totalHour % 24 + 8;
System.out.println("系统当前时间:"+hour +":"+ minute +":"+ second);
}
}
任意范围随机数
Math.random() 随机返回 [0,1) 之间的一个double型浮点数
(int)(Math.random() *10) --> 返回0~9之间的一个随机整数
a + Math.random()*b --> 返回 a ~ a+b之间的一个随机整数,不包括a+b
常见错误
- 未声明,未初始化变量
- 整数溢出 byte -18~127
- 取整错误
- 整数除法
|