精辟全面且细致的java运算符教程详解

网友投稿 292 2022-11-30

精辟全面且细致的java运算符教程详解

目录前言一、算术运算符1.1 int/int结果还是int1.2 0不能作为除数1.3 关于%1.4 增量赋值运算符+= -= *= /=1.5 自增或自减运算二、关系运算符三、逻辑运算符3.1 逻辑与&&3.2 逻辑或||3.3 逻辑非!四、位运算符4.1 按位与&4.2 按位或|4.3 按位异或^4.4 按位取反~五、移位运算5.1 左移<<5.2 右移>>5.3 无符号右移>>>六、条件运算符总结

前言

上一篇java专栏我们讲解了java的各个类型,这期我们来继续学习java的算术运算符,大家一起行动起来,你就是将来的java大佬!

一、算术运算符

基础四则运算符和C语言是一样的,都是+ - * / %

规则很简单,但我们需要对除法运算特别注意

1.1 int/int结果还是int

这里和我们的数学里的运算是不一样的,举个例子:1/2

数学中我们很快知道这个是0.5,但在计算机语言中,整形/整形结果会默认是整形,小数位会被移除,所以java中1/2结果是0

public static void main(String[] args) {

int a=1;

int b=2;

System.out.println(a/b);//打印0,如果需要小数,要有double

}

1.2 0不能作为除数

这个和数学里是一样的,0不能作为除数,否则系统会报错

public static void main(String[] args) {

int a=1;

int c=0;

System.out.println(a/c);//0是不能作为除数的,这里会异常

System.out.println("hhh");//由于上一行代码异常了,所以从上面一段开始往后都不执行了

}

1.3 关于%

这个符号是用来求余数的,比如10/3=3…1,那么10%3=1

public static void main(String[] args) {

System.out.println(10%3);//打印1

System.out.println(-10%3);//-1

System.out.println(10%-3);//1

System.out.println(-10%-3);//-1

System.out.println(11.5%3);//2.5

}

1.4 增量赋值运算符+= -= *= /=

public static void main(String[] args) {

int a=10;

a+=1;//a=a+1

System.out.println(a);//打印11

short b=1;

//b=b+1;//直接这样写会报错,因为单独一个1默认是整形,整形与short型的b相加会提升到整形,直接赋值会出错

b=(short)(b+1);//正确写法1

b+=1;//正确写法2

}

其他增量运算符也是一样的,a-=n也就是a=a-n,剩下的以此类推

关于short b=1;b+=1;在java中如果是增量赋值运算符,系统会自动帮你进行强制类型转换,但是如果你直接写b=b+1是会报错的,这时需要你自己手动强制类型转换

1.5 自增或自减运算

a++和++a的区别就是,前者是先用a,然后给a+1;后者是先给a+1,然后用a

比如,a=0;if(a++)这里的if里面就是0,因为是先用了a=0,然后给a+1。

a=0;if(++a)这里面的if就是1,因为是先给a+1,a已经变成1了,然后用a。

public static void main(String[] args) {

int a=10;

int a2=a++;

System.out.println(a);//打印11

System.out.println(a2);//打印10

int b=10;

int b2=++b;

System.out.println(b);//打印11

System.out.println(b2);//打印11

}

二、关系运算符

关系运算符共有6个:

== 判断两边是否相等

!=判断两边是否不等

<和>小于和大于符号

<=和> =小于等于和大于等于符号

public static void main(String[] args) {

int a=10;

int b=20;

System.out.println(a==b);//false

System.out.println(a!=b);//true

System.out.println(a

System.out.println(a>b);//false

System.out.println(a<=b);//true

System.out.println(a>=b);//false

}

这里和C语言不同的是,C语言中关系运算符成立是1,不成立是0。但java中不一样,java中关系运算符的表达式返回值都是boolean类型,也就是说,只有true或false没有1和0

ps:java中判断是if(布尔表达式)而不是C语言中的if(1/0)

三、逻辑运算符

常用逻辑运算符主要有三个:&&,||,!

注意:逻辑运算符的操作数(操作数往往是关系运算符的结果)和返回值都是boolean

3.1 逻辑与&&

大白话说就是高中我们学的 ^ “且”的意思

也就是说 表达式1&&表达式1 必须全真为真,一假为假

规则:两个操作数都是true,结果为true,否则结果为false

ps:短路——如果表达式1是假,表达式整体肯定是假,计算机系统就不会浪费时间去判断表达式2了。

public static void main(String[] args) {

int a=10;

int b=20;

int c=30;

System.out.println(a

System.out.println(a>b&&bb不成立,不管b

}

3.2 逻辑或||

也就是我们高中学的v“或”的意思

表达式1||表达式2 有一真为真,全假为假

规则:两个操作数一个是true,结果为true,两操作数全为false,结果为false

短路——表达式1为真,表达式整体肯定为真,不用再判断表达式2了

public static void main(String[] args) {

int a=10;

int b=20;

int c=30;

System.out.println(ac);//ac是否成立了,式子整体肯定为true

}

3.3 逻辑非!

!布尔表达式

!false=true

!true=false

注意:!是一个单目运算符,只有一个操作数

public static void main(String[] args) {

int a=10;

int b=20;

//System.out.println(!a

System.out.println(!(a

//如果要对a

}

注:&和|(不推荐使用)

&和|如果操作数是boolean时,也可以表示逻辑运算,但是与&&和||相比,它们不支持短路求值。

四、位运算符

java中对数据的操作的最小单位不是字节,而是二进制位

位运算符主要有4个:&,|,^,~

位操作表示按二进制位运算,计算机中都是用二进制来表示数据(0/1构成的数字序列),位运算就是按照二进制每一位依次进行计算

4.1 按位与&

如果两个对应二进制位都是1,结果为1,否则结果为0

public static void main(String[] args) {

int a=10;//0000 1010

int b=20;//0001 0100

//按位与: 0000 0000 对应的数字为0

System.out.println(a&b);//打印0

}

4.2 按位或|

如果两个对应二进制位有1,结果为1,全是0为0

public static void main(String[] args) {        int a=10;//0000 1010        int b=20;//0001 0100        //按位或:   0001 1110 对应的数字为30        System.out.println(a|b);//打印30    }

4.3 按位异或^

如果两个对应二进制位相异为1,相同为0

public static void main(String[] args) {        int a=10;//0000 1010        int b=30;//0001 1110        //按位异或   0001 0100 对应的数字为20        System.out.println(a^b);//打印20    }

本质就是找不同

4.4 按位取反~

二进制位上是0变成1,1变成0

public static void main(String[] args) {

int a=10;//0000 0000 0000 0000 0000 0000 00001010

//按位取反 1111 1111 1111 1111 1111 1111 1111 0101

//16进制打印 f f f f f f f 5

//ps:4位2进制是16种情况,对应16进制的16个数

System.out.printf("%x\n",~a);//打印fffffff5

}

五、移位运算

移位运算符有三个:

<< >> >>>

都是按照二进制位运算

注意:移位移动的是补码,如果是正数,原码和补码一样,所以你直接移动原码也可以

,但是如果是负数,你必须先转换成补码移位,然后再转换成原码

5.1 左移<<

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

比如现在有一个二进制数0000 1011(十进制11),我HPSEQ们对其进行移1位操作

0000 1011<<1

000 10110(对应十进制的22)

左边的0不要了,后面往左跟进一位,最右边会空出一位,我们进行补0操作

实际效果相当于11*2^1

再举一个例子:仍然是上面的二进制数0000 1011,进行移2位操作

0000 1011<<2

00 101100(对应十进制的44)

左移两位,左边两个数就不要了,最右边会空出2位,我们补0

实际效果相当于11*2^2

public static void main(String[] args) {

int a=11;

System.out.println(a<<1);//打印22

System.out.println(a<<2);//打印44

}

5.2 右移>>

右移,左边补符号位

注意:是符号位,是符号位,是符号位(重要的事情说三遍)

比如0000 1011>>1

得到0000 0101(十进制的5)

实际效果相当于11/(2^1)

再举个例子-11,二进制1000 1011

1000 1011(原)

1111 0100(反)

1111 0101(补)

补码进行右移1位

1111 1010(新补码)

1111 1001(新反码)

1000 0110(新原码)

新原码对应十进制数-6

public static void main(String[] args) {

int a=11;

int b=-11;

System.out.println(a>>1);//打印5

System.out.println(b>>1);//打印-6

}

5.3 无符号右移>>>

不管符号位是啥,左边统一补0

由于是无符号了,也就说没有所谓的负数了,也就说数值首位不再是符号位了。

那么1000 1010(十进制138)右移1位,得到0100 0101(十进制的69)

public static void main(String[] args) {

int a=138;

System.out.println(a>>>1);//打印69

}

那讲到这里,大家可能会问,哎,你怎么不讲无符号左移啊?

讲个笑话:没有无符号左移

不是说我不讲无符号左移啊,是真的这玩意不存在啊哈哈哈。

为什么呢?打个比方,你现在左移一位,那你右边不还是补0嘛,那这不就是(有符号)左移吗?

六、条件运算符

条件运算符和c语言一样:

表达式1?表达式2:表达式3

判断表达式1是否成立,成立执行表达式2,否则执行表达式3

public static void main(String[] args) {

int a=10;

int b=20;

int max=a>b?a:b;//a>b不成立,执行b,也就说b赋值给max

System.out.println(max);//打印20

}

总结

好啦,这就是今天的全部内容,内容量不大,但都是java必须掌握的知识点,希望读者耐心学习,最后祝读者学业有成。更多关于java运算符教程的资料请关注我们其它相关文章!

}

3.2 逻辑或||

也就是我们高中学的v“或”的意思

表达式1||表达式2 有一真为真,全假为假

规则:两个操作数一个是true,结果为true,两操作数全为false,结果为false

短路——表达式1为真,表达式整体肯定为真,不用再判断表达式2了

public static void main(String[] args) {

int a=10;

int b=20;

int c=30;

System.out.println(ac);//ac是否成立了,式子整体肯定为true

}

3.3 逻辑非!

!布尔表达式

!false=true

!true=false

注意:!是一个单目运算符,只有一个操作数

public static void main(String[] args) {

int a=10;

int b=20;

//System.out.println(!a

System.out.println(!(a

//如果要对a

}

注:&和|(不推荐使用)

&和|如果操作数是boolean时,也可以表示逻辑运算,但是与&&和||相比,它们不支持短路求值。

四、位运算符

java中对数据的操作的最小单位不是字节,而是二进制位

位运算符主要有4个:&,|,^,~

位操作表示按二进制位运算,计算机中都是用二进制来表示数据(0/1构成的数字序列),位运算就是按照二进制每一位依次进行计算

4.1 按位与&

如果两个对应二进制位都是1,结果为1,否则结果为0

public static void main(String[] args) {

int a=10;//0000 1010

int b=20;//0001 0100

//按位与: 0000 0000 对应的数字为0

System.out.println(a&b);//打印0

}

4.2 按位或|

如果两个对应二进制位有1,结果为1,全是0为0

public static void main(String[] args) {        int a=10;//0000 1010        int b=20;//0001 0100        //按位或:   0001 1110 对应的数字为30        System.out.println(a|b);//打印30    }

4.3 按位异或^

如果两个对应二进制位相异为1,相同为0

public static void main(String[] args) {        int a=10;//0000 1010        int b=30;//0001 1110        //按位异或   0001 0100 对应的数字为20        System.out.println(a^b);//打印20    }

本质就是找不同

4.4 按位取反~

二进制位上是0变成1,1变成0

public static void main(String[] args) {

int a=10;//0000 0000 0000 0000 0000 0000 00001010

//按位取反 1111 1111 1111 1111 1111 1111 1111 0101

//16进制打印 f f f f f f f 5

//ps:4位2进制是16种情况,对应16进制的16个数

System.out.printf("%x\n",~a);//打印fffffff5

}

五、移位运算

移位运算符有三个:

<< >> >>>

都是按照二进制位运算

注意:移位移动的是补码,如果是正数,原码和补码一样,所以你直接移动原码也可以

,但是如果是负数,你必须先转换成补码移位,然后再转换成原码

5.1 左移<<

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

比如现在有一个二进制数0000 1011(十进制11),我HPSEQ们对其进行移1位操作

0000 1011<<1

000 10110(对应十进制的22)

左边的0不要了,后面往左跟进一位,最右边会空出一位,我们进行补0操作

实际效果相当于11*2^1

再举一个例子:仍然是上面的二进制数0000 1011,进行移2位操作

0000 1011<<2

00 101100(对应十进制的44)

左移两位,左边两个数就不要了,最右边会空出2位,我们补0

实际效果相当于11*2^2

public static void main(String[] args) {

int a=11;

System.out.println(a<<1);//打印22

System.out.println(a<<2);//打印44

}

5.2 右移>>

右移,左边补符号位

注意:是符号位,是符号位,是符号位(重要的事情说三遍)

比如0000 1011>>1

得到0000 0101(十进制的5)

实际效果相当于11/(2^1)

再举个例子-11,二进制1000 1011

1000 1011(原)

1111 0100(反)

1111 0101(补)

补码进行右移1位

1111 1010(新补码)

1111 1001(新反码)

1000 0110(新原码)

新原码对应十进制数-6

public static void main(String[] args) {

int a=11;

int b=-11;

System.out.println(a>>1);//打印5

System.out.println(b>>1);//打印-6

}

5.3 无符号右移>>>

不管符号位是啥,左边统一补0

由于是无符号了,也就说没有所谓的负数了,也就说数值首位不再是符号位了。

那么1000 1010(十进制138)右移1位,得到0100 0101(十进制的69)

public static void main(String[] args) {

int a=138;

System.out.println(a>>>1);//打印69

}

那讲到这里,大家可能会问,哎,你怎么不讲无符号左移啊?

讲个笑话:没有无符号左移

不是说我不讲无符号左移啊,是真的这玩意不存在啊哈哈哈。

为什么呢?打个比方,你现在左移一位,那你右边不还是补0嘛,那这不就是(有符号)左移吗?

六、条件运算符

条件运算符和c语言一样:

表达式1?表达式2:表达式3

判断表达式1是否成立,成立执行表达式2,否则执行表达式3

public static void main(String[] args) {

int a=10;

int b=20;

int max=a>b?a:b;//a>b不成立,执行b,也就说b赋值给max

System.out.println(max);//打印20

}

总结

好啦,这就是今天的全部内容,内容量不大,但都是java必须掌握的知识点,希望读者耐心学习,最后祝读者学业有成。更多关于java运算符教程的资料请关注我们其它相关文章!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Kubernetes权威指南第2版 和 Docker技术入门与实战第2版 两本容器的书下载地址
下一篇:tb跨周期函数
相关文章

 发表评论

暂时没有评论,来抢沙发吧~