前言
上一篇java专栏我们讲解了java的各个类型,这期我们来继续学习java的算术运算符,大家一起行动起来,你就是将来的java带佬!
一、算术运算符
基础四则运算符和C语言是一样的,都是+ - * / % 规则很简单,但我们需要对除法运算特别注意
1.1int/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);
}
1.2 0不能作为除数
这个和数学里是一样的,0不能作为除数,否则系统会报错
public static void main(String[] args) {
int a=1;
int c=0;
System.out.println(a/c);
System.out.println("hhh");
}
1.3关于%
这个符号是用来求余数的,比如10/3=3…1,那么10%3=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);
System.out.println(11.5%3);
}
1.4增量赋值运算符+= -= *= /=
public static void main(String[] args) {
int a=10;
a+=1;
System.out.println(a);
short b=1;
b=(short)(b+1);
b+=1;
}
其他增量运算符也是一样的,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);
System.out.println(a2);
int b=10;
int b2=++b;
System.out.println(b);
System.out.println(b2);
}
二、关系运算符
关系运算符共有6个: == 判断两边是否相等 !=判断两边是否不等 <和>小于和大于符号 <=和> =小于等于和大于等于符号
public static void main(String[] args) {
int a=10;
int b=20;
System.out.println(a==b);
System.out.println(a!=b);
System.out.println(a<b);
System.out.println(a>b);
System.out.println(a<=b);
System.out.println(a>=b);
}
这里和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<b&&b<c);
System.out.println(a>b&&b<c);
}
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(a<b||b>c);
}
3.3逻辑非!
!布尔表达式 !false=true !true=false 注意:!是一个单目运算符,只有一个操作数
public static void main(String[] args) {
int a=10;
int b=20;
System.out.println(!(a<b));
}
注:&和|(不推荐使用) &和|如果操作数是boolean时,也可以表示逻辑运算,但是与&&和||相比,它们不支持短路求值。
四、位运算符
java中对数据的操作的最小单位不是字节,而是二进制位 位运算符主要有4个:&,|,^,~ 位操作表示按二进制位运算,计算机中都是用二进制来表示数据(0/1构成的数字序列),位运算就是按照二进制每一位依次进行计算
4.1按位与&
如果两个对应二进制位都是1,结果为1,否则结果为0
public static void main(String[] args) {
int a=10;
int b=20;
System.out.println(a&b);
}
4.2按位或|
如果两个对应二进制位有1,结果为1,全是0为0
public static void main(String[] args) {
int a=10;
int b=20;
System.out.println(a|b);
}
4.3按位异或^
如果两个对应二进制位相异为1,相同为0
public static void main(String[] args) {
int a=10;
int b=30;
System.out.println(a^b);
}
本质就是找不同
4.4按位取反~
二进制位上是0变成1,1变成0
public static void main(String[] args) {
int a=10;
System.out.printf("%x\n",~a);
}
五、移位运算
移位运算符有三个: << >> >>> 都是按照二进制位运算 注意:移位移动的是补码,如果是正数,原码和补码一样,所以你直接移动原码也可以 ,但是如果是负数,你必须先转换成补码移位,然后再转换成原码
5.1左移<<
最左侧位不要了,最右侧补0 比如现在有一个二进制数0000 1011(十进制11),我们对其进行移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);
System.out.println(a<<2);
}
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);
System.out.println(b>>1);
}
5.3无符号右移>>>
不管符号位是啥,左边统一补0 由于是无符号了,也就说没有所谓的负数了,也就说数值首位不再是符号位了。 那么1000 1010(十进制138)右移1位,得到0100 0101(十进制的69)
public static void main(String[] args) {
int a=138;
System.out.println(a>>>1);
}
那讲到这里,大家可能会问,哎,你怎么不讲无符号左移啊? 讲个笑话:没有无符号左移 不是说我不讲无符号左移啊,是真的这玩意不存在啊哈哈哈。 为什么呢?打个比方,你现在左移一位,那你右边不还是补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;
System.out.println(max);
}
总结
好啦,这就是今天的全部内容,内容量不大,但都是java必须掌握的知识点,希望读者耐心学习,最后祝读者学业有成。ps:三连催更,加快笔者更新速度
|