算术运算符
算术运算符是对数值型的变量进行运算的。
常用算术运算符
所以+运算符在java中表示三中含义:正号、加、字符串连接。
++ / % 运算符
publicclassSuanshuYsf{publicstaticvoidmain(String[]args){//除法System.out.println(10/4);//从数学来看是2.5,实际是2doubled1=10/4;// 10 / 4 = 2; d1 = 2.0;System.out.println(d1);//2.0System.out.println(10.0/4);//取模(取余数) java中取模的本质是一个公式://如果被除数<除数,取余就仍然是被除数。 1%3=1 2%5=2 -2%5=-2//如果被除数=除数,结果为0//如果被除数>除数//a % b = a - a / b x b//如果 a 为小数时:a % b = a - (int)a / b x b//如果 a b 为小数时:a % b = a - (int)(a / b) x bSystem.out.println(10%3);// 1System.out.println(-10%3);// -1System.out.println(10%-3);// 1System.out.println(-10%-3);// -1System.out.println(-10.5%3);// -1.5System.out.println(-10.5%-3);// -1.5//++//前++ 后++//作为独立运算时使用 ++i 和 i++ 没有任何区别inti=1;++i;//i = i + 1;System.out.println(i);// 2i++;//i = i + 1;System.out.println(i);// 3//如果作为混合运算时://前++: j = ++i; 先自增,后执行动作//后++: k = i++; 先执行动作(这里的赋值是先给临时变量,然后由临时变量付给变量),后自增。java的编译器在遇到i++和i--的时候会重新为变量运算分配一块内存空间,以存放原始的值,而在完成了赋值运算之后,将这块内存释放掉。//intj=++i;System.out.println("j = "+j+" i ="+i);//j = 4; i = 4;intk=i++;//int tmp = i; i = i + 1; k = tmp;System.out.println("k = "+j+" i ="+i);//k = 4; i = 5;}}关系运算符(比较运算符)
用于表示一个表达式结果的运算。关系运算符的结果是一个boolean值。true或false
常用关系运算符![]()
inta=6;intb=7;booleanflag=a>b;逻辑运算符
用于表示多个表达式结果的运算符,结果为一个boolean值。
逻辑运算符要求均为布尔类型。
常用逻辑运算符
分为两组:
- 短路与
&&, 短路或||, 取反! - 逻辑与
&,逻辑或|, 逻辑异或^
运算规则:
逻辑异或:当a和b不同是,则结果为true,否则为false;
短路与和逻辑与的区别
&&短路与: 如果第一个条件为false, 后边的条件不在去判断,结果为flase。效率高&逻辑与: 不管第一个条件是否为false, 都会去判断后边的条件,结果为flase。效率低
inta=5;intb=8;if(a<2&&++b>6){System.out.println("ok");}System.out.println("a = "+a+" b="+b);// b = 8;if(a<2&++b>6){System.out.println("ok");}System.out.println("a = "+a+" b="+b);//b = 9;短路或和逻辑或
||短路或: 如果第一个条件为true, 后边的条件不在去判断,结果为true。效率高|逻辑或: 不管第一个条件是否为true, 都会去判断后边的条件,结果为true。效率低
inta=5;intb=8;if(a>2||++b>6){System.out.println("ok");}System.out.println("a = "+a+" b="+b);// b = 8;if(a>2|++b>6){System.out.println("ok");}System.out.println("a = "+a+" b="+b);//b = 9;取反操作(略)
逻辑异或(略)
赋值运算符
基本赋值运算符int a = 15;
复合赋值运算符a += b;a -= b;a *= b;a /= b;a %= b;
复合复制运算符会进行类型转换
byteb=2;b+=3;//这里有个细节 b = (byte)(b + 3)b++;//b = (byte)(b + 1)三元运算符
结果 = 布尔表达式?表达式1(true):表达式2(false)
inta=10;intb=99;intresult=a>b?a++:b++;//这里执行 b++时候,是先执行result = b; b = b + 1; 这里的b++并不是独立运算,是赋值运算。**使用细节:**表达式1 和 表达式2 的类型要和赋值的变量类型一致或可以自动转换
三元运算符本质
intresult=a>b?a++:b++;//本质是一个if else 语句if(a>b){result=a++;}else{result=b++;}三元运算符可以嵌套使用
intresult=(s>d?c:e)>b?a++:b++;运算符优先级
上表特点:
上边优先级大于下边
只有单目运算、赋值运算,从右向左。
位运算(一般密码学经常使用)
java 中有7个位运算分为两组(&、|、^、~、>>、<< 和 >>>),位运算是对二进制的操作。
位运算符仅支持整数类型(int、long、char、byte、short)
&、|、^、~
- 按位与
&:n = 0 & 0; // 0 n = 0 & 1; // 0 n = 1 & 0; // 0 n = 1 & 1; // 1 - 按位或
|:n = 0 | 0; // 0 n = 0 | 1; // 1 n = 1 | 0; // 1 n = 1 | 1; // 1 - 按位异或
^:n=0^0;// 0n=0^1;// 1n=1^0;// 1n=1^1;// 0 - 按位取反
~: 0->1, 1->0。作用对象是一个二进制。
2 & 3 示例:
~-2示例:
~2 示例:
>>、<< 和 >>>
- 算术右移
>>: 低位溢出,符号位不变,并用符号位补溢出的高位。 - 算术左移
<<: 符号位不变,低位补0。 >>>逻辑右移也叫无符号右移, 规则是:低位溢出,高位补0。它的特点是不管符号位,右移后高位总是补0- 特别说明:没有
<<<符号
inta=1>>2;// ... 0000 0001 => ... 0000 0000 本质: 1 / 2 / 2 相当于向右边移动一位,1就除以2intb=1<<2;// ... 0000 0001 => ... 0000 0100 本质: 1 * 2 * 2 相当于向左边移动一位,1就乘以2