4、运算符

1、算数运算符

Java中的算术运算符和生活中的算数运算基本相似。

运算符运算范例结果
++3+3
-b=4;-b;-4
+5+510
-6-42
*3*412
/5/51
%取余(模)5%50
++自增(前)a=2;b++aa=3;b=3
++自增(后)a=2;b=a++a=3;b=2
自减(前)a=2;b–aa=1;b=1
自减(后)a=2;b=a–a=1;b=2
+字符串连接“He”+“llo”“Hello”

举例


在使用算术运算时需要注意运算两侧类型:当两侧类型不统一时,运算结果和较大类型保持一致

int a = 3;
int b = 5;
int c = a + b; //加法运算
c = a * b; //乘法
c = a / b; //除法运算 结果为零  注意除法运算当两侧类型统一结果仍为运算数据保持一致
c = a % b; //取模运算 ,即求a/b的余值

注意事项


如果对负数取余数求模可以忽略符号,如:5%-2=1。但被模数是负数就另当别论

对于除号“/”,它的整数除和小数除是有区别的整数之间做除法时,只保留整数部分而舍弃小数部分

“+”除字符串相加功能外,还能把非字符串转换成字符串 。“+”运算符两侧的操作数中只要有一个String类型,一个是基本数据类型时,编译成class文件后,两个操作数就被连接成了一个新的String值

总结:对于取模运算 m % n :

当 m 等于 n 时: m % n的结果为零。

当 m 大于 n 时: m % n的结果为 m / n 的余数。

当 m 小于 n 时: m % n的结果为 m。

自加自减


自加(++)自减(–)运算。

++:自加。对原有的数据进行+1

--:自减。对原有的数据进行-1

当在一个运算表达式中包含自加运算时,当自加符号在变量右侧时需要先将变量的值临时保存,然后给变量空间加1,接着用临时变量空间中的值去和其他运算符进行运算。当自加符号在变量左侧时,需要先给变量空间加1,然后把加1后的值和其他运算符进行运算

int a = 4;
int b;
b = a++;
System.out.println("a="+a+",b="+b);

注意:自加自减运算单独存在时,放左放右是没有区别的。

思考下题:

int i = 4;
i = i++;
System.out.println("i = "+i);

2.赋值运算符


赋值运算符号

= , +=, -=, *=, /=, %=

赋值号的功能是将赋值号右侧的结果存储到左侧变量空间中。

int a = 3;
int b,c,d;
b = c = d = a;// 把a的值赋值给d ,再把d的值赋值给c..b
// 注意:赋值运算符不能拆分(算术运算符+=),自动完成类型转化。

赋值号和算术运算符组合起来的混合运算符,它们即具有算术运算的特定,同时还具有赋值运算的特定。

int a = 4;
a += 3; //相当于 a = a + 3;的运算,即把a空间中的值和3进行加法运算,把和值从新存放到a空间中

注意:赋值号和算数运算符的混合运算属于一个运算符,不能拆分。并且这个符号会完成自动强转动作。

// 思考
short s = 3;
// s = s + 2; s会被提升为int ,计算的结果也是int,s为short类型。需要强转
s = (short)(s + 2);
s += 2;// 赋值运算符 会自动转化   

说明:

s = s + 2//编译失败,因为s会被提升为int类型,运算后的结果还是int类型。无法赋值给short类型。

s += 2//编译通过,因为+=运算符在给s赋值时,自动完成了强转操作。

3、比较运算符


在生活中经常需要判断数据大小相等不相等各种操作,在Java中同样也可以判断数据的大小

比较运算符符号:

>大于 >=大于等于 <小于 <=小于等于 ==相等 !=不等

比较运算符的结果 ,要么true,要么false。以后会根据比较的结果做出相应逻辑判断。

int a = 4;
int b = 5;
boolean c ;
c = a > b;
System.out.println(b);

public static void main(String[] args) {
    boolean flag;
    int number01 = 45;
    flag = (number01*20) > 50;
    System.out.println("比较结果为:"+flag);
    // 比较运算的 等于 是 "=="
}

注1:比较运算符的结果都是boolean型,也就是要么是true,要么是false。

注2:比较运算符“==”不能误写成“=” 。

4、逻辑运算符


当需要判断某些数据符合某个区间,比如人的年龄符合某一范围等。发现使用比较运算没法完成。Java给我们提供另外一直机制,逻辑运算。逻辑运算符用于连接布尔型表达式,在Java中不可以写成3<x<6,应该写成x>3 & x<6

逻辑运算符号


逻辑运算符。用来连接boolean型表达式的。

& : 与

| :或

^ : 异或。

!:非。

&& 短路与 || 短路或
在这里插入图片描述
运算规律

int x = 7;
x>2 & x<5
x<2 | x>5

& :两边都为true,结果是true。否则为false。
     两边只要有一个false。结果必然是falsetrue  &  true = true;		
true  & false = false;
false &  true = false;
false & false = false;

| :两边都为false,结果是false。否则为true。
   两边只要有一个true。结果必然是truetrue  |  true = true;		
true  | false = true;
false |  true = true;
false | false = false;

^ : 异或。
  两边相同为false。两边不同为truetrue  ^  true = false;		
true  ^ false = true;
false ^  true = true;
false ^ false = false;

!:非
非真为假,非假为真
!true = false;&”和“&&”的区别:单与时,左边无论真假,右边都进行运算;双与时,如果左边为真,右边参与运算,如果左边为假,那么右边不参与运算。
“|”和“||”的区别同理,双或时,左边为真,右边不参与运算。

注意:&&找到false后面的不执行,||找到true 后面的不执行。

5、位移运算符


位运算:主要说的是二进制数位运算。

1、运算符符号


& 按位与运算 ,运算原则:相同二进制数位上数值为1,结果为1,否则结果为0;

3 & 5 先把 3和5以二进制表示,再进行按位于运算:

十进制 二进制 结果(十进制)

3 00000000_00000000_00000000_00000011

5 00000000_00000000_00000000_00000101

-------------------------------------------------------------------------------------------------

& : 00000000_00000000_00000000_00000001 1

所以3 & 5等于 1.

| 按位或运算,运算原则:相同二进制数位上数值为0,结果为0,否则结果为1;

3 | 5 先把 3和5以二进制表示,再进行按位于运算:

十进制 二进制 结果(十进制)

3 00000000_00000000_00000000_00000011

5 00000000_00000000_00000000_00000101

-----------------------------------------------------------------------------------------

| : 00000000_00000000_00000000_00000111 7

所以3 | 5等于 7.

2的0次方 + 2 的1次方 + 2的2次方 = 1 + 2 + 4 = 7

^ 按位异或,运算原则:参与运算的两个数相应位相同则结果为0,异号则为1;

十进制 二进制 结果(十进制)

3 00000000_00000000_00000000_00000011

5 00000000_00000000_00000000_00000101

-----------------------------------------------------------------------------------------

^ : 00000000_00000000_00000000_00000110 6

所以3 ^ 5等于 6.

~ 按位取反,运算原则:二进制数位上0变1,1变0;

十进制 二进制 结果(十进制)

5 00000000_00000000_00000000_00000101

-----------------------------------------------------------------------------------------
: 11111111_11111111_11111111_1111010 -6

所以~5等于 -6.

左移操作“<<”:将运算数的二进制码整体左移指定位数,左移之后的空使用“0”来补充,移出去的二进制数忽略不计。9<<1

9 << 2 :

十进制 二进制 结果(十进制)

9 00000000_00000000_00000000_00001001

-----------------------------------------------------------------------------------------

00000000_00000000_00000000_0000100100 36

所以9<<2等于 36.

规律:<<:相当于给原数乘以2的倍数

右移操作“>>”:将运算数的二进制码整体右移指定位数,右移之后的空使用“符号位”来补充。移出去的二进制数忽略不计。若是正数使用“0”补充;若是负数使用“1”补充;

9 >>2 :

十进制 二进制 结果(十进制)

9 00000000_00000000_00000000_00001001

-----------------------------------------------------------------------------------------

​ 0000000000_00000000_00000000_00001001 2

所以9>>2等于 2.

规律:>>:相当于给原数除以2的倍数

-6 >> 2:

十进制 二进制 结果(十进制)

-6 11111111_11111111_11111111_1111010

-----------------------------------------------------------------------------------------

​ 1111111111_11111111_11111111_1111010

所以-6>>2等于 -2.

无符号右移">>>":将运算数的二进制码整体右移指定位数,右移之后的空使用“0”来补充

2、位运算应用


需求1最有效率运算2乘以8,通过位移运算2<<3

需求2:对两个整数变量的值进行互换(不需要第三方变量)

一个数字 ^ 同一个数字两次 得到本身

// 任何一个数^一个数两次得到它本身
// 通过第三方变量的形式进行置换。
int a = 3, b = 7;
int temp = a;
a = b;
b = temp;

// 通过和的形式。有个弊端,两个数据较大,可能会超出int范围。
a = a + b;//a = 3 + 7;
b = a - b;//b = 3 + 7 - 7; b = 3;
a = a - b;//a = 3 + 7 - 3;  a = 7;

// 技巧。异或。
a = a ^ b;// a = 3 ^ 7;
b = a ^ b;// b = 3 ^ 7 ^ 7;
a = a ^ b;// a = 3 ^ 7 ^ 3;

课程延伸


一、幂运算


使用Math.pow(a,b)来计算 a b a^b ab ,a和b是方法pow的两个未知变量。

二、计算优先级


当一个表达式里有多个操作符,有以下优先级来用于计算:

  • 乘法、除法和求余运算首先计算。如果表达式中包括若干个乘法和除法和求余操作符,可按照从左到右的顺序执行。
  • 最后执行加法和减法,如果一个计算存在若干个加法和减法操作符,则按照从左到右的顺序执行。
    在这里插入图片描述

三、显示时间


System.currentTimeMillis() : 返回当前时间的毫秒值

/**
 * 获取当前时间,并且截取时分秒。
 */
public class 显示时间 {
    public static void main(String[] args) {
        // 获取格林威治时间距今的  毫秒值
        long totalMillSeconds = System.currentTimeMillis();
        // 获取格林威治时间距今的  秒值
        long totalSeconds = totalMillSeconds / 1000;
        // 显示的秒值
        long currentSecond = totalSeconds % 60;
        // 获取格林威治时间距今的  分钟值
        long totalMinutes = totalSeconds / 60;
        // 显示的分钟值
        long currentMinute = totalMinutes % 60;
        // 获取格林威治时间距今的  小时值
        long totalHours = totalMinutes / 60;
        // 显示的小时值
        long currentHours = totalHours % 24;

        System.out.println("当前时间是:"+(8+currentHours)+":"+currentMinute+":"+currentSecond+" GMT");
    }
}

四、产生随机数


Math.random()来获取一个0.0到1.0之间的随机double值,不包含1.0。

/**
 * 产生随机数
 */
public class 产生随机数 {
    public static void main(String[] args) {
        // 产生两个随机数
        int number1 = (int) (Math.random() * 10);
        int number2 = (int) (Math.random() * 10);
		// 输出
        System.out.println("number1 = " + number1);
        System.out.println("number2 = " + number2);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值