> 文档中心 > JAVASE语法零基础——运算符(只讲解与C语言细微区别)

JAVASE语法零基础——运算符(只讲解与C语言细微区别)


Java系列文章目录


JAVASE语法零基础——运算符(只讲解与C语言细微区别)

Write once,Runanywhere.🔥🔥🔥

前面几篇文章都是可以帮助C语言学习者快速熟悉Java的语法,如果你是没有学习过C语言而直接来观看的这个JavaSE语法系列的专栏,那你可以先去看看我C语言的相关专栏,便于你快速掌握JavaSE的语法。
这篇文章着重讲解Java运算符与C语言里运算符的细微区别,两者之间并没有太大的区别。

💥 💥 💥如果你觉得我的文章有帮助到你,请您点赞评论收藏并转发给你身边的朋友,得到你们支持就是我最大的动力!!!
💥 💥 💥
JAVASE语法零基础——运算符(只讲解与C语言细微区别)

🚀🚀🚀 新的知识开始喽🚀🚀🚀
JAVASE语法零基础——运算符(只讲解与C语言细微区别)

文章目录

  • Java系列文章目录
  • 1.什么是运算符
  • 2.什么是表达式
  • 3.算术运算符
    • 3.1 基本四则运算符:加减乘除模(+ - * / %)
      • 3.1.1 除法 /
      • 3.1.2 取模 %
      • 3.1.3除数为0除法或者取模运算
    • 3.2 增量运算符 += -= *= %=
    • 3.3.自增/自减运算符++ --
    • 3 .4.关系运算符
    • 3.5逻辑运算符(重点)
      • 3.5.1.逻辑与&&
        • 3.5.1.1**语法规则:布尔表达式1 && 布尔表达式2**
        • 3.5.1.2**短路与**
      • 3.5.2.逻辑或||
    • 3.5.2.1**语法规则:布尔表达式1 || 布尔表达式2**
      • 3.5.3.逻辑非!
    • 3.6.按位运算符
      • 3.6.1 位运算符
      • 3.6.2 位移运算(了解)
        • 3.6.1 **左移<<**
        • 3.6.2 **右移>>**
        • 3.6.3 无符号右移
    • 3.7 条件运算符
  • 3.8 运算符的优先级


1.什么是运算符

像 =、-、+、等等,这样对操作数执行数学运算的符号称为运算符。
Java中运算符可以分为:算术运算符(+ - * /)、关系运算符( ==)、逻辑运算符、移位运算符以及条件运算符等等。

2.什么是表达式

表达式:运算符和操作数的结合。
以下这些式子都称作为表达式:

int a = 10;int b = 20;a + b;a>b;

3.算术运算符

3.1 基本四则运算符:加减乘除模(+ - * / %)

还是说明一下,这里的模(%)运算就是数学当中求除法的余数。
直接上代码:

int a = 10; int b = 20; System.out.println(a+b);//30 System.out.println(a-b);//-10 System.out.println(a*b);//200 System.out.println(a/b);//0 System.out.println(a%b);//10

这里重点看下面两块代码:

3.1.1 除法 /

请你写出下面代码执行后的结果

   public static void main(String[] args) { System.out.println(5/2); System.out.println(5.0/2); System.out.println(5/2.0); System.out.println((float)(5/2));    }

答案是2、2.5、2.5、2.0。
看代码后的注释分析:

 public static void main(String[] args) { System.out.println(5/2);// 整型/整型 == 整型 5/2 == 2 System.out.println(5.0/2);// 小数默认double型  double/int == double , int 提升为double型 System.out.println(5/2.0);//  小数默认double型  int/double == double , int 提升为double型 System.out.println((float)(5/2));// int/int == int 5/2 == 2 ,(float)强转为float型 -->2.0    }

3.1.2 取模 %

还是一样请你写出一下代码的运行结果。

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); System.out.println(11.5%2);    }

答案以及分析看下面代码的注解:

public static void main(String[] args) { System.out.println(10%3);// 10/3 ==3......1 System.out.println(10%-3);// 10/-3 ==-3......1 System.out.println(-10%3);// -10/3 ==-3......-1 System.out.println(-10%-3);// -10/-3 ==3......-1 System.out.println(11.5%2);// 11.5/2 == 5......1.5    }

这里的模运算与Java里的区别: 1.可以对浮点类型的数字进行取模运算 2.取模运算的结果可以是浮点数

3.1.3除数为0除法或者取模运算

在数学当中,除数也就是分母是不能为0的,Java程序当中也一样。
看代码:
在这里插入图片描述
程序会出现异常,异常指的是:在程序运行的时候,出现了不正常的行为。

3.2 增量运算符 += -= *= %=

看代码:

 public static void main(String[] args) { int a = 4; a += 1; System.out.println(a);//a = a+1; 5 a -= 1; System.out.println(a);//a = a-1; 4 a *= 5; System.out.println(a);//a = a*5; 20 a /= 2; System.out.println(a);//a = a/2; 20/2==10 a %= 2; System.out.println(a);//a = a%2; 20%2 ==0    }

但是在Java里面,增量运算符可以自动帮我们进行类型转换看代码:
在这里插入图片描述

注意:只有变量才能使用该增量运算符,常量不能使用。

3.3.自增/自减运算符++ –

作用与效果跟C语言相同,直接看代码1:

  int a = 1; ++a; System.out.println(a);//2
int a = 1; a++; System.out.println(a);//2

这里不管是前置++和后置++都打印1。

代码2:

    int a = 1; a++;//++后置 先使用后++ System.out.println(a++);//2  a++---》3 System.out.println(a);//3
  int a = 1; ++a;// 2 ++前置 先++后使用 System.out.println(++a);//3 System.out.println(a);//3
  • 如果单独使用,【前置++】和【后置++】没有任何区别。
  • 如果混合使用,【前置++】就是先++再使用,【后置++】就是先使用后++。
  • 只有变量才能自增/自减运算,常量不能使用,因为常量不允许被修改。

3 .4.关系运算符

关系运算符主要有6个:== != =,其计算结果是true或者false。
在这里插入图片描述
需要注意的点就是要判断范围时:3<a<5和C语言一样这是错误的写法。

3.5逻辑运算符(重点)

逻辑运算符主要有三个:&& || !,运算结果都是Boolean类型。

3.5.1.逻辑与&&

3.5.1.1语法规则:布尔表达式1 && 布尔表达式2

布尔表达式:表达式的结果为true或者false。
在这里插入图片描述

public static void main9(String[] args) { System.out.println(true && true);//true System.out.println(true && false);//false System.out.println(false && true);//false System.out.println(false && false);//false    }

下图这个语句会报警告,因为19/0不是布尔表达式。
JAVASE语法零基础——运算符(只讲解与C语言细微区别)
19/0改写成布尔表达式(19/0)==0

public static void main(String[] args) { int a = 1; int b = 2; System.out.println((a>b)&&(19/0)==0);//false    }

3.5.1.2短路与

JAVASE语法零基础——运算符(只讲解与C语言细微区别)

int a = 1;int b = 2;System.out.printin((a>b) && (19/0 ==0));

JAVASE语法零基础——运算符(只讲解与C语言细微区别)

3.5.2.逻辑或||

3.5.2.1语法规则:布尔表达式1 || 布尔表达式2

在这里插入图片描述

 public static void main(String[] args) { System.out.println(true||true);//true System.out.println(true||false);//true System.out.println(false||true);//true System.out.println(false||false);//false    }

3.5.3.逻辑非!

语法规则:!布尔表达式

int a = 1; System.out.println(!(a==1));//false

JAVASE语法零基础——运算符(只讲解与C语言细微区别)

3.6.按位运算符

3.6.1 位运算符

位运算符操作的对象是二进制的比特位,位运算符的操作对象主要有四个:&、|、^、~

与C语言相同:
按位与&:如果两个二进制位都为1,则结果为1,否者为0。
按位或|:如果两个二进制位都为0,则结果为0,否则为1。
注意:当&和|的操作数为整数(int、short、byte、long)的时候,表示按位运算,当操作数为Boolean表达式时,表示逻辑运算。
在这里插入图片描述

按位异或:如果两个二进制位相同则为0,相异则为1。
按位取反~:如果该二进制位为0则转化为1,如果该二进制位为1则转化为0。
因为前面C语言的专栏有讲到过,所以这里只讲解一下按位取反:

int a = 0xf; System.out.printf("%x\n",~a);//fffffff0 System.out.println(~a);//-16 //0xf ==> 正数补码: 00000000 00000000 00000000 00001111 //~a ==> 取反后补码:11111111 11111111 11111111 11110000 //      f  f     f   f    f   f    f   0 // a取反后变成了负数:11111111 11111111 11111111 11110000 //   补码-1:11111111 11111111 11111111 11101111 //      取反得到原码:10000000 00000000 00000000 00010000==》-16

注意:

  • 0x为前缀的数字为十六进制数字,一个十六进制数字对应4个二进制位
  • 0xf表示十进制的15,也就是二进制的1111。
  • printf能够格式化的输出内容,%x表示按照十六进制输出.
  • \n表示换行。

3.6.2 位移运算(了解)

<< 左移:最左侧位不要了,最右侧补0
>>右移:最右侧位不要了,最左侧补0
>>> 无符号左移: 最右侧位不要了,最左侧补0

3.6.1 左移<<

 int a = 10; //只看后8位 00001010 //a<<1    00010100 //20 System.out.println(a<<1);//20

注意:左移丢弃的是符号位,因此正数左移可能会变成负数。

3.6.2 右移>>

最右侧不要了,最左侧补符号位(正数补0,负数补1)

  int b = 11; System.out.println(b>>1);//5 //    00001011-->10 //>>1 00000101-->5 System.out.println(b>>2);//2 System.out.println(b>>3);//1

规律小结:
左移1位相当于对原来的数字*2
右移1位对于正数相当于原来的数字/2,对于负数相当于对于原来的数字/2再减1

对于正数:

 int a = 10; //只看后8位 00001010 //a<<1    00010100 //20 System.out.println(a<<1);//20 System.out.println(a<<2); int b = 11; System.out.println(b>>1);//5 System.out.println(b>>2);//2 System.out.println(b>>3);//1

对于负数:

 int a = -10; //只看后8位 00001010 //a<<1    00010100 //20 System.out.println(a<<1);//-20 System.out.println(a<<2);//-40 int b = -11; System.out.println(b>>1);//-6 -11/2==-5 -5-1==-6 System.out.println(b>>2);//-3 System.out.println(b>>3);//-2

3.6.3 无符号右移

最右侧位不要了,最左侧位补0

 int c = 1; //     00000001 //>>>1 00000000--->0 System.out.println(c>>>1);//0

注意:

  • 由于计算机位移的效率高于计算乘除,当某个代码正好乘除2的N次方的时候可以使用位移运算代替
  • 移动负数位或者移动位数过大都没有意义

3.7 条件运算符

条件运算符只有一个,同时也是Java中唯一的一个三目运算符布尔表达式1?表达式2:表达式3

  1. 布尔表示1true时,整个表达式的值为表达式2的值
  2. 布尔表示1false时,整个表达式的值为表达式3的值
//求两个整数的最大值 int a = 10; int b = 20; int max = a>b?a:b; System.out.println(max);//20

复杂的条件运算符:

 boolean flg = false ? false : true == true ? true : false; //      表达式1  表达式2     表达式3     表达式4 //      表达式1错误执行表达式3  //      表达式3正确 执行表达式4 System.out.println(flg);//true

注意:

  1. 表达式2和表达式3的结果要是同类型的,除非能发生类型隐式类型转换
 System.out.println(true?1:2.0);//1.0  表达式2 int类型隐式提升为double类型
  1. 表达式不能单独存在,其产生的结果必须要被使用,否则会报错
    JAVASE语法零基础——运算符(只讲解与C语言细微区别)

    3.8 运算符的优先级

    优先级不必记忆,在写代码运算时注意括号()的使用即可。


🌏🌏🌏今天的你看懂这里又学到了很多东西吧🌏🌏🌏

JAVASE语法零基础——运算符(只讲解与C语言细微区别)

🌔 🌔 🌔下次见喽🌔 🌔 🌔
JAVASE语法零基础——运算符(只讲解与C语言细微区别)