JAVASE语法零基础——运算符(只讲解与C语言细微区别)
Java系列文章目录
Write once,Runanywhere.🔥🔥🔥
前面几篇文章都是可以帮助C语言学习者快速熟悉Java的语法,如果你是没有学习过C语言而直接来观看的这个JavaSE语法系列的专栏,那你可以先去看看我C语言的相关专栏,便于你快速掌握JavaSE的语法。
这篇文章着重讲解Java运算符与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
不是布尔表达式。
将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短路与
int a = 1;int b = 2;System.out.printin((a>b) && (19/0 ==0));
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
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
为true
时,整个表达式的值为表达式2
的值 - 当
布尔表示1
为false
时,整个表达式的值为表达式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
注意:
- 表达式2和表达式3的结果要是同类型的,除非能发生类型隐式类型转换
System.out.println(true?1:2.0);//1.0 表达式2 int类型隐式提升为double类型
-
表达式不能单独存在,其产生的结果必须要被使用,否则会报错
3.8 运算符的优先级
优先级不必记忆,在写代码运算时注意
括号()
的使用即可。
🌏🌏🌏今天的你看懂这里又学到了很多东西吧🌏🌏🌏
🌔 🌔 🌔下次见喽🌔 🌔 🌔