【JAVA】运算符

【JAVA】运算符,第1张

运算符
  • 前言
  • 一、什么是运算符
  • 二、算术运算符
    • 1. 基本四则运算符
    • 2. 增量运算符
    • 3. 自增/自减运算符
    • 3. 关系运算符
    • 4. 逻辑运算符(重点)
      • 1. 逻辑与&&
      • 2. 逻辑或
      • 3. 逻辑非 !
      • 注意:
    • 5. 位运算符
      • 1. 按位与&
      • 2. 按位或|
      • 3. 按位取反~
      • 4. 按位异或^
    • 6. 移位运算(了解)
      • 1. 左移 <<
      • 2. 右移 >>
      • 3. 无符号右移 >>>
      • 4. 小结
    • 7. 条件运算符
    • 8. 运算符的优先级
  • THINK


前言

欢迎一起进入运算符的世界!一起进步!

本节主要了解java的相关的运算符。
一起学习 一起进步!


努力踏平荆棘!

一、什么是运算符
  1. *** 作符对 *** 作数进行 *** 作时的符号,不同运算符 *** 作的含义不同。
  2. 作为一门计算机语言,Java也提供了一套丰富的运算符来 *** 纵变量。Java中运算符可分为以下:算术运算符(+ - *
    /)、关系运算符(< > ==)、逻辑运算符、位运算符、移位运算符以及条件运算符等。
  3. 表达式:运算符和 *** 作数结合
二、算术运算符 1. 基本四则运算符
  1. 基本四则运算符:+ - * / %(模:求余)
  2. 两个整数相除,结果一定是一个整数,没有小数(强转另看)
public class TestDemo {
    public static void main(String[] args) {
        System.out.println(5/2);
        System.out.println((float) 5/2);
        System.out.println(5/(float)2);
        System.out.println((float) (5/2));
    }
}

分析:

public class TestDemo {
    public static void main(String[] args) {
        System.out.println(5/2);  
        //整型/整型=整型(向下取整)
        System.out.println((float) 5/2);  
        //5强制转换float类型,则int会提升为float类型,结果为float类型
        System.out.println(5/(float)2);   
        //2强制转换float类型,则int会提升为float类型,结果为float类型
        System.out.println((float) (5/2));  
        //(5/2)是整型相除,结果为整型,然后该整型被强制转换为float类型
    }
}

结果:

  1. 除数为0:
    1)整型/0 : ArithmeticException–算术异常

异常:指的是这个程序运行的时候出现的不正常行为。

public static void main(String[] args) {
        System.out.println(5/0);
    }

结果:

2) 整型/ 浮点数0:

public static void main(String[] args) {
        float a =0;
        System.out.println(1/a);
    }

结果:

分析:
浮点型是近似值,不是精确数,则a并不是一个实际的确定值0,是一个无限接近0的小数,故不报错且无穷大

  1. 求余数%(模)
    1) 整数求模
public static void main(String[] args) {
        System.out.println(10%3);
        System.out.println(10%-3);
        System.out.println(-10%3);
        System.out.println(-10%-3);
    }

分析:
看被除数,余数符号和被除数保持一致

结果:

2)小数求模

public static void main(String[] args) {
        System.out.println(11.5%2.0);
    }

注意:
可以对小数进行求余数

结果:

  • 注意:

注意:

  • 基本四则运算都是二元运算符,使用时必须要有左右两个 *** 作数
  • int / int 结果还是int类型,而且会向下取整
  1. 补充
  • 做除法和取模时,右 *** 作数不能为0
  • % 不仅可以对整形取模,也可以对double类型取模,但是没有意义,一般都是对整形取模的
  • 两侧 *** 作数类型不一致时,向类型大的提升
2. 增量运算符
  1. 增量运算符:+= -= *= %=
public static void main(String[] args) {
        short s1 = 10;
        short b = s1 +1;
    }

分析:
1是int型,且记性运算时,会将小于int型的数据转换到int型计算,结果为int型,需要进行强转才可以得到short型

结果:

  1. +=自动进行类型转换
public static void main(String[] args) {
        short s1 = 10;
        short b =(short) (s1 +1);
        b += 1;
        System.out.println(b);
    }
  • 以上两种均可实现:强转 or +=
  • 注意:只有变量才能使用该运算符,常量不能使用。
3. 自增/自减运算符
  1. 自增/自减运算符 ++ –
  2. 前置++与后置++:
    对于自身而言,值最后都会变
    但是对于赋值而言,前置后置会有区别
  3. 前置:先加后用–本身及被赋值的都变
    后置:先用后加–本身变。被赋值的变量先不变
public static void main(String[] args) {
        int a = 1;
        int b = 1;
        int c = ++a;
        int d = b++;
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
    }

输出结果:

  • 注意:

注意:

  • 如果单独使用,【前置++】和【后置++】没有任何区别

  • 如果混合使用,【前置++】先+1,然后使用变量+1之后的值,【后置++】先使用变量原来的值,表达式结束时给变量+1

  • 只有变量才能使用自增/自减运算符,常量不能使用,因为常量不允许被修改

3. 关系运算符
  1. 关系运算符主要有六个:== != > < >= <=
  2. 所有关系运算符与 *** 作数结合只有两个结果:true or
    false
  3. 注意:当需要多次判断时,不能连着写。比如:3 < a < 5,Java程序与数学中是有区别的,此时应该写为:(a > 3) && (a <5)
4. 逻辑运算符(重点)

逻辑运算符主要有三个: && || ! ,运算结果都是 boolean类型,即运算结果只有 true or false。

1. 逻辑与&&
  1. 布尔表达式均为真结果才是真
  2. 语法表达式:布尔表达式1 && 布尔表达式2 (布尔表达式:boolean类型表达式)
  3. 短路与:只要出现假就停止往后执行!!
public static void main(String[] args) {
        int a =1;
        int b =2;
        System.out.println((a > b) && (19 /0 == 0));
    }

结果:

分析:
理论上:19/0会报错,但是此时能得到正确结果,因为逻辑与是短路与,一旦遇到false就停止后面的计算

2. 逻辑或
  1. 语法规则:布尔表达式1 || 布尔表达式2
  2. 只要一个表达式为真,结果即为真
  3. 短路或:只要出现一个表达式为真,后面的表达式就不被执行
public static void main(String[] args) {
        int a =1;
        int b =2;
        System.out.println((a < b) || (19 /0 == 0));
    }

结果:

分析:
理论上:19/0会报错,但是此时能得到正确结果,因为逻辑或是短路或,一旦遇到true就停止后面的计算

3. 逻辑非 !
  1. 语法规则:!布尔表达式(注意:一定是布尔表达式!!)
注意:
  1. & 和 | 如果表达式结果为 boolean 时, 也表示逻辑运算. 但与 && || 相比, 它们不支持短路求值.
 public static void main(String[] args) {
        System.out.println(10 > 20 & 10 / 0 == 0);
        System.out.println(10 < 20 | 10 / 0 == 0);
    }

结果:抛出异常

5. 位运算符
  1. Java 中数据存储的最小单位是字节,而数据 *** 作的最小单位是比特位. 字节是最小的存储单位,每个字节是由8个二进制比特位组成的,多个字节组合在一起可以表示各种不同的数据。
  2. 位运算符主要有四个: & | ~ ^ ,除 ~ 是一元运算符外,其余都是二元运算符。
  3. 位 *** 作表示 按二进制位运算. 计算机中都是使用二进制来表示数据的(01构成的序列), 按位运算就是在按照二进制位的每一位依次进行计算.
1. 按位与&

先转换为二进制,然后两个数对应位都是1,结果才是1

2. 按位或|

先转换为二进制,然后两个数只要对应位存在1,结果就是1

3. 按位取反~

0变为1,1变为0

注意:

  • 0x 前缀的数字为 十六进制 数字. 十六进制可以看成是二进制的简化表示方式. 一个十六进制数字对应 4个二进制位.
    0xf 表示 10 进制的 15, 也就是二进制的 1111
  • printf 能够格式化输出内容, %x 表示按照十六进制输出.
  • \n 表示换行符
4. 按位异或^
  1. 对应位相同为0,相异为1
  2. 注意:如果两个数相同,则异或的结果为0
6. 移位运算(了解)

移位运算符有三个: << >> >>> ,都是二元运算符,且都是按照二进制比特位来运算的。

1. 左移 <<
  1. 规则: 最左侧位不要了, 最右侧补 0.
  2. 对于正数而言,左移 *** 作就相当于乘以2 *** 作,每左移一位就会乘以一次2;则:左移n位就是(原数*2^n )
  3. 注意:向左移位时,丢弃的是符号位,因此正数左移可能会编程负数 – 针对二进制
2. 右移 >>
  1. 规则:最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)
  2. 注意:前面补的位根符号位保持一致
  3. 对于正数而言:右移相当于除法,右移n位,则结果为:(原数/(2^n))
3. 无符号右移 >>>
  1. 规则: 最右侧位不要了, 最左侧补 0.
  2. 不管符号位是0还是1,统统补0
    则:负数进行无符号右移后会变正数
    3, 无符号左移—没有!!
4. 小结
  1. 左移 1 位, 相当于原数字 * 2 ; 左移 N 位, 相当于原数字 * 2 的N次方.
  2. 右移 1 位, 相当于原数字 / 2.; 右移 N 位, 相当于原数字 / 2 的N次方.
  3. 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.
  4. 移动负数位或者移位位数过大都没有意义.
7. 条件运算符
  1. 即:三目运算符
  2. 条件运算符只有一个:表达式1 ? 表达式2 : 表达式3;
    1为布尔表达式:若1为真,则执行2,否则执行3
  3. Java 中唯一的一个 三目运算符, 是条件判断语句的简化写法
  4. 注意!!!
    1)表达式2和表达式3的结果要是同类型的,除非能发生类型隐式类型转换
public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int c = a > b? 1 : 2.0;
    }

结果:

2)若未赋值给变量直接输出,则可以表达式2、3 不同类型

public static void main(String[] args) {
        System.out.println(true?1:2.0);
    }

结果:(注意:被进行了类型的隐式转换)

3) 表达式不能单独存在,其产生的结果必须要被使用

public static void main(String[] args) {
        int a = 10;
        int b = 20;
        a > b ? a : b;
    }

结果:

8. 运算符的优先级

不知道运算符优先级,则加括号即可


THINK
  • 无符号右移>>>
  • && || 逻辑 *** 作符–短路性质
  • % 求模运算–多了小数

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/757358.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-30
下一篇 2022-04-30

发表评论

登录后才能评论

评论列表(0条)

保存