运算符是一种特殊的符号,用于表示数据的运算、赋值和比较。
算术运算符是对数值类型的变量进行运算的。
在java中 %(模) 的本质:a % b = a - a / b * b 简记:符号取左边变量的。
++(自增)的一些注意事项
i++;先赋值,再自增
int i =2; int j = i++; //i = 3, j = 2
++i;先自增,再赋值
int i = 2; int j = ++i; //i =3, j = 3
自身++赋值
int i =1; i = i++;
后++,先使用,后自增,很容易理解为i=i,然后i++,得到i = 2;但实际上上面代码结果为i = 1。
这里其实会有一个临时变量temp;i = i++实际过程为
(1)temp = i;(2)i = i + 1;(3)i = temp;
所以最终i = 1。
另外,i = ++i 的执行过程为(1)i = i + 1;(2)temp = i;(3)i = temp。
关系运算符的结果都是boolearn型,要么是true,要么是false。
用于连接多个条件(多个关系表达式),最终的结果也是以一个boolean值。
&&叫短路与,如果&&符号之前的为false,后面的条件不判断(常用)
&叫逻辑与,不管&符号前是否为false,后面的条件都判断
|| 和 | 和 && 与 & 类似。
^逻辑异或: a^b,当a和b不同时,结果为true,否则为false。
易错题
答案为 50。
首先z++是后加加,所以先判断z和46是否相等然后再自增,相等,&&前为true,此时z为47,然后把true赋值给y,&&后也为真,if语句成立,z++,此时z为48;然后把false赋值给x,||前为false,判断后面表达式,++z,先自增再判断,z为49,z与49相等,||后面表达式成立,if语句成立,z++,z为50。
赋值运算符的左边只能是变量,右边可以是变量、表达式、常量值。
复合赋值运算符会进行类型转换,如:byte num = 4; num += 2; 相当于 byte num = 4; num = (byte)(num + 2);
标识符规范
java中有7个位运算符(&、|、^、~、>>、<<和>>>)
特别说明:没有<<<符号。
// 位运算 public class BitOperrator{ public static void main(String[] args){ // 2&3 // 2的原码 00000000 00000000 00000000 00000010 // 2的反码 00000000 00000000 00000000 00000010 // 2的补码 00000000 00000000 00000000 00000010 // 3的补码 00000000 00000000 00000000 00000011 // 按位与 & // 00000000 00000000 00000000 00000010 // 00000000 00000000 00000000 00000011 // 00000000 00000000 00000000 00000010 运算后的补码 // 运算后的原码 00000000 00000000 00000000 00000010 // 结果就是 2 System.out.println(2&3); // 2 //============================================================ // ~-2 // -2的原码 10000000 00000000 00000000 00000010 // -2的反码 11111111 11111111 11111111 11111101 // -2的补码 11111111 11111111 11111111 11111110 // 按位取反 00000000 00000000 00000000 00000001 运算后的补码 // 运算后的原码 00000000 00000000 00000000 00000001 // 结果就是 1 System.out.println(~-2); // 1 //============================================================ // ~2 // 2的补码 00000000 00000000 00000000 00000010 // 按位取反 11111111 11111111 11111111 11111101 运算后的补码 // 运算后的反码 11111111 11111111 11111111 11111100 // 运算后的原码 10000000 00000000 00000000 00000011 // 结果就是 -3 System.out.println(~2); // -3 //============================================================ // 2|3 // 2的补码 00000000 00000000 00000000 00000010 // 3的补码 00000000 00000000 00000000 00000011 // 按位或 | // 00000000 00000000 00000000 00000010 // 00000000 00000000 00000000 00000011 // 00000000 00000000 00000000 00000011 运算后的补码 // 运算后的原码 00000000 00000000 00000000 00000011 // 结果就是 3 System.out.println(2|3); // 3 //============================================================ // 2^3 // 2的补码 00000000 00000000 00000000 00000010 // 3的补码 00000000 00000000 00000000 00000011 // 按位异或 00000000 00000000 00000000 00000001 运算后的补码 // 运算后的原码 00000000 00000000 00000000 00000001 // 结果就是 1 System.out.println(2^3); // 1 //============================================================ System.out.println(1>>2); // 1 / 2 / 2 = 0 System.out.println(1<<2); // 1 * 2 * 2 = 4 } }