Java系列文章目录
**Write once,Runanywhere.**🔥🔥🔥
前面几篇文章都是可以帮助C语言学习者快速熟悉Java的语法,如果你是没有学习过C语言而直接来观看的这个JavaSE语法系列的专栏,那你可以先去看看我C语言的相关专栏,便于你快速掌握JavaSE的语法。
这篇文章着重讲解Java运算符与C语言里运算符的细微区别,两者之间并没有太大的区别。
💥 💥 💥如果你觉得我的文章有帮助到你,请您点赞评论收藏并转发给你身边的朋友,得到你们支持就是我最大的动力!!!
💥 💥 💥
🚀🚀🚀 新的知识开始喽🚀🚀🚀
文章目录
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);//30System.out.println(a-b);//-10System.out.println(a*b);//200System.out.println(a/b);//0System.out.println(a%b);//10
这里重点看下面两块代码:
3.1.1 除法 /
请你写出下面代码执行后的结果
publicstaticvoidmain(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。
看代码后的注释分析:
publicstaticvoidmain(String[] args){System.out.println(5/2);// 整型/整型 == 整型 5/2 == 2System.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 取模 %
还是一样请你写出一下代码的运行结果。
publicstaticvoidmain(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);}
答案以及分析看下面代码的注解:
publicstaticvoidmain(String[] args){System.out.println(10%3);// 10/3 ==3......1System.out.println(10%-3);// 10/-3 ==-3......1System.out.println(-10%3);// -10/3 ==-3......-1System.out.println(-10%-3);// -10/-3 ==3......-1System.out.println(11.5%2);// 11.5/2 == 5......1.5}
这里的模运算与Java里的区别: 1.可以对浮点类型的数字进行取模运算 2.取模运算的结果可以是浮点数
3.1.3除数为0除法或者取模运算
在数学当中,
除数也就是分母是不能为0的
,Java程序当中也一样。
看代码:
程序会出现异常,异常指的是:在程序运行的时候,出现了不正常的行为。
3.2 增量运算符 += -= *= %=
看代码:
publicstaticvoidmain(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++---》3System.out.println(a);//3
int a =1;++a;// 2 ++前置 先++后使用System.out.println(++a);//3System.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。
publicstaticvoidmain9(String[] args){System.out.println(true&&true);//trueSystem.out.println(true&&false);//falseSystem.out.println(false&&true);//falseSystem.out.println(false&&false);//false}
下图这个语句会报警告,因为
19/0
不是布尔表达式。
将
19/0
改写成布尔表达式
(19/0)==0
:
publicstaticvoidmain(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
publicstaticvoidmain(String[] args){System.out.println(true||true);//trueSystem.out.println(true||false);//trueSystem.out.println(false||true);//trueSystem.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);//fffffff0System.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 //20System.out.println(a<<1);//20
注意:左移丢弃的是符号位,因此正数左移可能会变成负数。
3.6.2 右移>>
最右侧不要了,最左侧补符号位(正数补0,负数补1)
int b =11;System.out.println(b>>1);//5// 00001011-->10//>>1 00000101-->5System.out.println(b>>2);//2System.out.println(b>>3);//1
规律小结:
左移1位相当于对原来的数字*2
右移1位对于正数相当于原来的数字/2,对于负数相当于对于原来的数字/2再减1
对于正数:
int a =10;//只看后8位 00001010//a<<1 00010100 //20System.out.println(a<<1);//20System.out.println(a<<2);int b =11;System.out.println(b>>1);//5System.out.println(b>>2);//2System.out.println(b>>3);//1
对于负数:
int a =-10;//只看后8位 00001010//a<<1 00010100 //20System.out.println(a<<1);//-20System.out.println(a<<2);//-40int b =-11;System.out.println(b>>1);//-6 -11/2==-5 -5-1==-6System.out.println(b>>2);//-3System.out.println(b>>3);//-2
3.6.3 无符号右移
最右侧位不要了,最左侧位补0
int c =1;// 00000001//>>>1 00000000--->0System.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正确 执行表达式4System.out.println(flg);//true
注意:
- 表达式2和表达式3的结果要是同类型的,除非能发生类型隐式类型转换
System.out.println(true?1:2.0);//1.0 表达式2 int类型隐式提升为double类型
- 表达式不能单独存在,其产生的结果必须要被使用,否则会报错## 3.8 运算符的优先级优先级不必记忆,在写代码运算时注意
括号()
的使用即可。---
🌏🌏🌏今天的你看懂这里又学到了很多东西吧🌏🌏🌏
🌔 🌔 🌔下次见喽🌔 🌔 🌔
版权归原作者 马上回来了 所有, 如有侵权,请联系我们删除。