图集说明:
补充两个:
单目运算符 正号 +10 10 单目运算符 负号 n=10;-n; -10若两个操作数都是整型,结果也是整型,除数不能为0 若两个操作数有一个是浮点型,结果是浮点型 System.out.println(10/3); //System.out.println(10/0); //除数不能为0,错误 System.out.println(10/3.0); // System.out.println(10.0/0); //Infinity,正无穷大 System.out.println(-10/0.0); //-Infinity ,负无穷大
求余数运算 结果的符号与被取模数有关,与模数无关 System.out.println(5.5 % 3.2); System.out.println(5 % 0.0); //NaN ,非数 System.out.println(-5 % 0.0); //NaN ,非数 System.out.println(0 % 5.0); System.out.println(0 % 0.0); //NaN ,非数 //System.out.println(5 % 0); System.out.println((-5) % 3); System.out.println(5 % (-3));
单目运算符 操作数只能是变量,不能是常量和表达式 分为前缀和后缀 前缀 先算后用 后缀 先用后算 //int n =1++; int a =1; System.out.println(a); int b = ++a+2; System.out.println(“a=”+a+",b="+b); int c = a-- +2; System.out.println(“a=”+a+",c="+c);
规则: 为变量指定值,不能为常量或表达式赋值= 符号两边的数据类型不一致时,使用自动类型转换或强制类型转换原则处理 int n = 10; //声明并赋值 int a1,b1,c1; // 连续声明 a1=b1=c1=10; // 多个已声明变量连续赋值 //int x=y=z=10; //错误 除了 = 运算符外,都是扩展赋值运算符,编译器先运算在赋值 int a2=1; a2 +=1; // a= ? 表达式等价于? a2 *=2; // a=? 表达式等价于? 如果两种类型不兼容,或者目标类型小于原型时,要进行强制类型转换 使用扩展运算符时,强制类型转换自动完成,不需要显示强制转换 byte b3=1; //b3= b3+1; // 常量1 是int 型,b+1是int 型 b+=1; // 自动完成强制类型转换
结果是布尔型 Boolean 除== 外 其他的运算符都只能是数值类型 只要是数值类型,不管数据类型是否相同,都能比较 基本类型的常量和变量不能和引用类型的常量和变量比较 Boolean 类型的常量和变量不能和其他任意类型的常量变量使用== 比较 引用类型之间没有继承关系也不能用== 比较 boolean b4 = 1<2.0; //结果为: //boolean b5 =“0” <= “0”; // < 不支持引用类型比较 boolean b6 =“0” == “0”; // == 支持字符串比较 //boolean b7 = true!=0; //不支持布尔与其他类型比较 boolean b8 = true == false;
规则: & 与 && 运算符都是与 两个操作数都是true 结果才是true,其他为false & 两个操作数都进行判断 && 前面的为false,后面的不判断
| 和 || 都表示或操作, 两个操作数只要有一个为true 结果就位true,否则为false | 两个操作数都进行判断 || 前面的为true,后面的不判断
^ 为异或运算,异1同0 6.位运算符
补充: << 左移 00000001<<2 0000 0100 1000 0001 <<2 0000 0100
右移 0000 0100>>2 0000 0001 1000 0100 >>2 1110 0001
无符号右移 0000 0100 >>>2 0000 0001 1000 0100 >>>2 0010 0001 规则: 只能操作整型变量或常量 & 参与按位与运算的两个操作数 对应的二进制位同为1 ,则结果为1,否则为0 | 参与按位或运算的两个操作数对应的二进制位有一个1 ,则结果为1,否则为0 ~ 取反 ^ 异1 同0 << 左移 二进制位整体左移指定位数,后边补0,左边移出去的舍弃
右移 二进制位整体右移指定位数,左边填充符号位(正0负1),右边移出去的舍弃
无符号右移 二进制位整体右移指定位数,左边填充0,右边的舍弃
对于低于int 型(byte short char)的操作数总是先转换为int型后再位移 对于int 型的位移,当位移数大于int 位数大于32 时,先用位移数对32求余,得到的余数才是真的位移数 a>>33 a>>1 Long 型位移,当位移数大于long 位数64时,先用位移数对64求余,余数为实际位移数 int n = -12>>>3; System.out.println(n); byte a =-12; byte b = 3; byte m =(byte)(a>>>b); System.out.println(m);