java 运算符与表达式 (基础)

运算符与表达式

算术运算符

算术操作符:+,-,*,/,%,++,–表示加减乘除,取余(求模),自增和自减
/运算,两个操作数都是整数时,表示整数除法
否则,表示浮点除法
整数被0除将产生一个异常,浮点数被O除得到无穷大或者NaN

image-20211204194254593

public class Test{
    public static void main(String[] args){
        int i = 3;
        int j = 2;
        System.out.println(i/j); // 结果为1
        double k = 2System.out.println(i/k); // 结果为1.5    
    }
}

image-20211204194330432

// 例如: 
int i = 3;
int i2 = i++System.out.print("i=" + i);
System.out.print("i2=" + i2);
/**输出
    i=4
    i2=3
因为++在后时,先取值再运算,先把i的值赋给i2,在对i进行++
*/

关系运算符、逻辑运算符

关系运算符,求值结果为布尔型
==检测是否相等 ,如3 ==7的值为false
!=检测是否不等,如3!7的值为true
image-20211204195057163

三元运算符

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); 
        //score =80时,我们认为成绩:及格
    }
}

位运算符

在处理整形数值时,可以直接对组成整形数值的各个位进行操作。这意味着可以使用屏献技术获得整数中的各个位
image-20220304200317007

位运算的奇巧淫技

image-20220304202153582

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 ? "偶数""奇数"))); //加法优先级高于三元运算符,所以还需要加个括号
        //99是奇数
    }
}

获取二进制为是1还是0(两种方案)

例如给定 x = 86 问第五位是1还是0?

方案1:先把1左移四位与x做与运算,然后把结果第5位右移四位,看是0还是1

 //方案1 
  System.out.println(num + "二进制数的第5位是:" +(((num &(1<<4))>>4)==0 ? "0" :"1"))//方案2
  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);//num1=20,num2=10

不用判断语句,求整数的绝对值

与-1做异或相当于取反

image-20220304203652370

num2 = -20;
System.out.println("num2的绝对值为"((num2^(num>>31))+(num2>>>31)));

赋值运算符

当“=”两侧数据类型不一致时,可以使用默认类型转换或使用强制类型转换进行处理
注意:可以将整型常量直接赋值给byte,short, char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围

image-20211207221806864

类型转换

java数据类型转换分为

自动类型转换

强制类型转换

image-20220305202320311

byte,char和short 型参与运算时自动提升为int型

对于表达式

  • 如果一个操作数为long型,则整个表达式提升为long型
  • 如果一个操作数为float型,则整个表达式提升为float型
  • 如果一个操作数为double型,则整个表达式提升为double型

image-20220305203843194

/**
 * case2 放回当前系统时间
 * 已知  System.currentTimeMillis()返回1970-1-1零点至今的毫秒数,类型为long
 */
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
  • 取整错误
  • 整数除法
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

与 或

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值