【Java|基础篇】超详细讲解运算符

1. 什么是运算符

运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。
作用: 对字面量和变量进行操作的符号

2. 算术运算符

算术运算符就是数学中的 加减乘除取余

运算符 描述
+
-
*
/ 除(取整)
% 取余

示例:

public class Demo3 {
    
    
    public static void main(String[] args) {
    
    
        int a = 5;
        int b = 2;
        System.out.println("a+b="+(a+b));
        System.out.println("a-b="+(a-b));
        System.out.println("a*b="+(a*b));
        System.out.println("a/b="+(a/b));
        System.out.println("a%b="+(a%b));
    }
}
/*
输出结果:
a+b=7
a-b=3
a*b=10
a/b=2
a%b=1
*/

注意:

  • 在代码中,如果有小数进行操作,可能会有精度不准确的问题(简单说一下原因是因为计算机是采用二进制的方式存储数据,小数不好表示.如有需要可以观看这篇文章➡计算机中数据的存储规则
  • 做除法和取模时,右操作数不能为0

隐式类型转换

Java中有两个数据类型的转换模式:一种是隐形类型转换,另外一种是强制类型转换
先介绍隐式类型转换
先看以下代码:

    public static void main(String[] args) {
    
    
        int a = 1;
        double b = 2.1;
        System.out.println(a + b);
    }

上面代码的结果是3.1 这就是隐式类型转换
数字在进行运算时,数据类型不一样是不能进行运算的,需要转成相同的数据类型才能够进行运算

隐形类型转换是 将取值范围小(精度小)的数据类型转成取值范围大(精度大)的数据类型

在进行运算时,取值范围小的数据类型自动变成取值范围大的数据,然后再进行运算

byte char short 类型的数据在进行运算时,都会类型提升为int类型的数值 再进行运算

强制类型转换

强制类型转换是 将取值范围大(精度大)的数据类型转成取值范围小(精度小)的数据类型
语法格式: 目标数据类型 变量名 = (目标数据类型) 被强转的数据

示例:

    public static void main(String[] args) {
    
    
        double a = 12.3;
        // 目标数据类型 变量名 = (目标数据类型) 被强转的数据
        int b = (int) a;
    }

这就是强制类型转换
需要注意的是:在强制类型转换时,数据不能超过目标数据类型的取值范围

字符串的拼接

在讲算术运算符时,我是使用了字符串的拼接的
例如:

    public static void main(String[] args) {
    
    
        int a = 5;
        int b = 2;
        System.out.println("a+b="+(a+b));
    }
    // 输出结果
    // a+b=7

当"+"操作中出现字符串时,那么此时这个"+"就不是算术运算符了,而是字符串的拼接,它会将字符串和数据拼接起来,变成一个新的字符串

字符相加

看以下代码:

    public static void main(String[] args) {
    
    
        char a = 'a';
        char b = 'b';
        int ret = a + b;
        System.out.println(ret);
    }
    // 输出结果: 195

之前说过byte char short 类型的数据在进行运算时,都会类型提升为int类型的数值 再进行运算
那么字符和字符相加都是变为int类型的数据再相加,那么字符对应的数字就需要用到ASCII码表了
如果想字符对应的ASCII值,可以看看➡ASCII码一览表,ASCII码对照表

在 字符与字符 或 字符与数字 进行相加时,字符会变为ASCII码表对应的数字在进行相加

自增和自减运算符

符号 作用
++ 将变量的值自增1
将变量的值自减1

这里的自增自减分的符号 可以放在变量名的前面也可以放在后面

示例:

    public static void main(String[] args) {
    
    
        int a = 10;
        a++;
        System.out.println("a = "+ a);
        ++a;
        System.out.println("a = "+ a);
    }
    //输出结果
    //a = 11
	//a = 12

从这里我们可以看到不管++在变量前面还是后面 就是将变量的值+1
当然++在变量前面还是后面还是有区别的

先看代码:

    public static void main(String[] args) {
    
    
        int a = 10;
        int ret1 = ++a;
        System.out.println("ret1 = "+  ret1);
        int b = 10;
        int ret2 = b++;
        System.out.println("ret2 = "+ ret2);
    }
	// 输出结果:
	//ret1 = 11
	//ret2 = 10

这就是++在变量前面还是后面的区别
在使用这种方式进行赋值时,++在前面时会变量的值会先自增1然后再进行赋值,如果++在后面则会先赋值然后再自增1

3.赋值运算符

赋值运算符就是 “=” 就是将一个数据赋值给另一个变量
其中,还有一些复合赋值运算符

运算符 实例
+= b+=a 等价于 b=b+a
-= b-=a 等价于 b=b-a
*= b*=a 等价于 b=b*a
/= b/=a 等价于 b=b/a
%= b%=a 等价于 b=b%a

4. 关系运算符

关系运算符就比较两边数据的大小

运算符 描述
== 判断内容是否相等
!= 判断内容是否不相等
> 判断大于号左边的值是否大于右边
< 判断小于号左边的值是否小于右边
>= 判断大于号左边的值是否大于等于右边
<= 判断小于号左边的值是否小于等于右边

关系运算符的结果都是boolean类型的 结果要么为true 要么为false
注意: 不要将 "==" 写成 "="了

5. 逻辑运算符

符号 意义 作用
& 逻辑与(且) 并且 两边都为真,才是真
I 逻辑或 或 两边都是假,才是假
^ 逻辑异或 相同为false,不同为true
! 逻辑非 取反

短路与(&&)和短路或(||)

  1. 对于 && , 如果左侧表达式值为 false, 则表达式结果一定是 false, 无需计算右侧表达式.
  2. 对于 ||, 如果左侧表达式值为 true, 则表达式结果一定是 true, 无需计算右侧表达式.
  3. & 和 | 两边的表达式都要计算,使用短路与和短路或可以提高效率

6.三目运算符

语法格式: 关系表达式? 表达式1:表达式2

示例:

    public static void main(String[] args) {
    
    
        int a = 10;
        int b = 20;
        int c = a > b ? a : b;
        System.out.println(c);
    }
    // 输出结果:20

这是使用三目运算符求两个值中的最大值
这里的计算分为三步:

  1. 先计算表达的值
  2. 如果表达式为true,则取表达式1的值,如果为false,则为表达式2的值
  3. 然后进行赋值

7. 位运算符

位运算符主要有四个: & | ~ ^ ,除 ~ 是一元运算符外,其余都是二元运算符

位运算符都是在二进制的基础上进行运算

  1. 按位与 &: 如果两个二进制位都是 1, 则结果为 1, 否则结果为 0.
  2. 按位或 |: 如果两个二进制位都是 0, 则结果为 0, 否则结果为 1.
  3. 按位取反 ~: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0
  4. 按位异或 ^: 如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1.

8. 移位运算

移位运算也是在二进制的基础上进行运算

  1. 左移 <<: 最左侧位不要了, 最右侧补 0.
  2. 右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
  3. 无符号右移 >>>: 最右侧位不要了, 最左侧补 0.

二进制的第一位是符号位,0代表正数,1代表负数
详情可以看一下:➡全面解析数据在内存中的存储

    public static void main(String[] args) {
    
    
        int a = 10;
        System.out.println("a << 1 = "+(a<<1));
        System.out.println("a >> 1 = "+(a>>1));
        System.out.println("a >>> 1 = "+(a>>>1));
    }
    // 输出结果:
    //a << 1 = 20
	//a >> 1 = 5
	//a >>> 1 = 5
  • 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.
  • 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.

感谢你的观看!希望这篇文章能帮到你!
Java专栏在不断更新中,欢迎订阅!
“愿与君共勉,携手共进!”
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_63463510/article/details/129198836