算术运算符
- +、-、*、/、%、++、–
+:两个数相加,结果类型默认是int类型,但是如果其中一个数是大于int类型级别的时候相加的结果会自动转换成该更高的类型。
byte a=10;
int b=30;
System.out.println(a+b);
//输出的结果是40,为int类型的,因为变量类型定义的最高级就是int类型的,
//故输出结果就是默认的int类型的
int a=10;
int b=30;
System.out.println(a+(double)b);
//输出的结果是40.0,为double类型的,因为把b强制转换成double类型的
//是比int类型高级的数字类型,故而输出结果就是double类型的
-、*、/ 都与+运算符的性质类似,其中“/”有一个注意点值得提出
(结果算的小数的“ * ”类似)
int a=5;
int b=10;
System.out.println(a/b);
//这样虽然得到的结果是0.5,但是输出的结果却是0,因为a/b默认是int类型的,
//而int型带小数的数字都只会向下取整而不是四舍五入,故而输出结果是0
//应该这样修改
System.out.println((doule)a/b);
/*或者*/System.out.println(a/(doubleb));
/*但是不能这样*/System.out.println((double)(a/b));
//因为如果跟最后一种修改方式的话,a/b会先被运算,
//这个时候仍然是int类型的,最后double只是将结果0强制转换成了double类型,
//这样的输出结果是0.0
- **“ % ”**取余运算符(取余运算也叫作模运算)
我们知道:10/3=3…1;而如果10%3=1;
int a=3;
int b=7;
System.out.println(a%b);
System.out.println(b%a);
//输出结果是3和1
带负号的取余运算
int a=-2;
int b=-5;
int c=2;
System.out.println(a%b);
System.out.println(b%a);
System.out.println(c%b);
System.out.println(b%c);
//输出结果是-2 -1 2 -5
//由此我们知道带符号进行模运算的时候,结果的负号与%符号左边的数相同,其余
//运算规则则按照正数的规则进行运算即可
小数的取余运算与正数负数的运算规则一致;
- **"++、–"**自增、自减运算符:
先看代码:
int a=3;
int b;
b=a++;
System.out.println(a);
System.out.println(b);
b=++a;
System.out.println(a);
System.out.println(b);
//输出的结果是:4 3 5 5
/*解析:a++与++a是不相同的,执行b=a++;语句,之所以输出第一个a结果是4是因为
a++ 与a=a+1是同一个意思,而输出的第一个b是3是因为,a++式子会先把a的值赋给
b后再来进行自加操作,而语句b=++a;被执行后,输出的a是5是因为++a也是自增操作
,但是此时b的值为5是因为,++a会把先自增后的a赋给b*/
a++与++a的区别在于对于a的调用顺序的不同;“–”符号操作类似;
赋值运算符:=
a=b并不是读作a等于b,而是读作把b的值赋给a;
关系运算符:>,<,==,>=,<=,!=,instanceof
关系运算符返回的值的类型都是boolean类型的,即false true
其中>,<,>=,<=,==,!=都是用来比较数字数值大小的,满足则返回true,若不满足则返回false。
instanceof则是判断左边的对象是否是右边类的实例,若是则返回true,否则则返回false。
int a=10;
int b=20;
int c=20;
A newFunction=new A();
System.out.println(a>b);
System.out.println(a<b);
System.out.println(a==b);
System.out.println(a!=b);
System.out.println(c>=b);
System.out.println(newFunction instanceof A);
class A{]
//输出的结果是
false
true
false
true
true
true
逻辑运算符:&&、||、!
与(and)、或(or)、非(取反);
boolean a=false;
boolean b=true;
System.out.println(a&&b);
System.out.println(a||b);
System.out.println(!(a&&b));
//输出的结果是 false true true
“&&”:左右两个都为真才是真,有一个假就是假;
“||”:左右两个都是假才是假,有一个真就是真;
“!”:右边为假就是真,为真就是假;
***引申:***“&&”运算符是短路运算,对于(a&&b)当程序读到了a=false的时候程序就不再读下去了,因为b的值无论是什么最终的结果都是假。
实例解释;
int c=5;
boolean a=(c<4)&&(++c<3);
System.out.println(a);
System.out.println(c);
boolean b=(++c>5)&&(c++>6);
System.out.println(b);
System.out.println(c);
//输出的结果是 false 5 false 7,说明第二行语句并没有执行++c即短路运算;
位运算:&、|、^、~、>>、<<、>>>
位运算的对象是整数的二进制形式;
int a=0b0011_1100;
int b=0b1000_0101;
//这里ab位数相同
System.out.println(a&b);
System.out.println(a|b);
System.out.println(a^b);
System.out.println(~b);
/*
4---------0b0000_0100 位数对应的数全为1才是1,否则都是0
189-------0b1011_1101 位数对应的数全为0才是0,否则都是1
185-------0b1011_1001 位数对应的数相同才是0,否则都是0
-134------0b0111_1010 位数对应的数均相反
*/
如果二进制位数不相同的话则右对齐且少的那位左边添0进行比较;
//这个有个“~”转换后的值笔者不是很明白
位运算:直接与底层进行联系,计算效率非常高。
System.out.println(3<<3);//表示3对应的二进制的数中的所有1都左移三位
//输出结果是24 即 0000 0011——>0001 1000
条件运算符:?、:
x ? y : z;---->表示如果x的值是 真 返回y,反之则返回z;
int grade1=88;
String standard= grade1<60?"及格":"不及格";
System.out.println(standard);
//输出结果是 不及格
扩展运算符:+=、-=、*=、/=
偷懒用的:
int a=20;
byte b=30;
a+=b;
b-=a;
System.out.println(a);
System.out.println(b);
//输出结果是 50 -20
//因为a+=b-->a=a+b;b-=a-->b=b-a;剩余两个类似,但别忘了是默认int类型计算的
知识扩展:字符串连接符:+
int a=10;
int b=20;
System.out.println(a+b);
System.out.println(""+a+b);
System.out.println(a+b+"");
//输出结果是 30 a+b 30
//只要前面出现了 "" 则后面都会按原样输出
一元运算符(一目运算符):只有一个对象
、、、
三元运算符(三目元算符):有三个对象
byte占一字节:一字节=八位 0000 0000
、、、
short占四字节:0000 0000 0000 0000 0000 0000 0000 0000