Java基础笔记08——运算符
一、运算符
1.算数运算符:
(1)+:加
①可以为加法运算符
②可以连接字符串
(2)-:减
(3)*:乘
(4)/:除(结果保留整数部分)
(5)%:取余(求模)
①n%m,n为被模数
②被模数为正数,结果为正数;被模数为负数,结果为负数
(6)++:自增
①n++:先赋值,后+1
②++n:先+1,后赋值
(7)--:自减
①n--:先赋值,后-1
②--n:先-1,后赋值
2.关系操作符:
(1)>:大于
(2)>=:大于等于
(3)<:小于
(4)<=:小于等于
(5)==:等于
(6)!=:不等于
3.位运算符:
(1)&:与,全1出1
(2)|:或,有1出1
(3)^:位异或,不同出1
(4)~:取反,1变0,0变1
(5)<<:按位左移,将整数的二进制值向左移动N位,右边空出位置补0
(6)>>:按位右移,将整数的二进制向右移动N位,如果最高位(正数都是0)为0,则左边空出位置补0;如果最高位(负数都是1)为1,则左边空出位置补1
(7)>>>:无符号右移,将整数的二进制值向右移动N位,左边空出位置补0
注意:左移或者右移相当于实现正数乘以或者除以2的N次方
4.逻辑运算符:
(1)&&:逻辑与,全真出真
(2)||:逻辑或,有真出真
(3)!:逻辑非,真变假,假变真
5.赋值运算符:
(1)=:赋值运算符
(2)+=:m+=n等价于m=m+n
(3)-=:m-=n等价于m=m-n
(4)*=:m*=n等价于m=m*n
(5)/=:m/=n等价于m=m/n
(6)%=:m%=n等价于m=m%n
(7)<<=:m<<=n等价于m=m<<n
(8)>>=:m>>=n等价于m=m>>n
(9)&=: m&=n等价于m=m&n
(10)^=:m^=n等价于m=m^n
(11)|=:m|=n等价于m=m|n
6.三元运算符:
? :
规则:
变量 = 条件 ? 条件为真时的语句 : 条件为假时的语句;
7.instanceof运算符
作用:用于检测对象是否是一个特定类型类类型或接口类型)
规则:(对象) instanceof (类/接口类型)
二、逻辑运算符(&&、||)与位运算符(&、|)的异同点:
(1)相同点:都可以进行逻辑运算
(2)不同点:
①做逻辑运算时,逻辑运算符可以做短路运算,位运算符不可以做短路运算,逻辑运算符效率大于位运算符
②位运算可以做按位运算,但是逻辑运算符不可以
package com.lqh.chapter01; public class _05operator { public static void main(String[] args) { int a = 100; int b = 150; System.out.println(a + b);// 加法:结果为250 System.out.println(a + "b");//这里的“+”可以连接字符串 System.out.println(a - b);// 减法:结果为-50 System.out.println(a * b);// 乘法:结果为15000 System.out.println(a / b);// 除法:结果为0 System.out.println(a % b);// 取余:结果为100 System.out.println(-10 % 5);//被模数为负数,结果为负数 System.out.println(a++);// 自增(先赋值后加1):结果为100 System.out.println(++a);// 自增(先加1后赋值):结果为102 System.out.println(a--);// 自减(先赋值后减1):结果为102 System.out.println(--a);// 自减(先减1后赋值):结果为100 System.out.println(a > b);// 大于:结果为false System.out.println(a >= b);// 大于等于:结果为false System.out.println(a < b);// 小于:结果为true System.out.println(a <= b);// 小于等于:结果为true System.out.println(a == b);// 等于:结果为false System.out.println(a != b);// 不等于:结果为true int c = 16;// c的二进制数为:0001 0000 int d = 240;// d的二进制数为:1111 0000 int d2 = -4;//d2的二进制数为:1111 0100 System.out.println(c & d);// 与,全1出1,结果为:0001 0000(即16) System.out.println(c | d);// 或,有1出1,结果为:1111 0000(即240) System.out.println(c ^ d);// 位异或,不同出1,结果为:1110 0000(即224) System.out.println(~d);// 取反,1变0,0变1,结果为:0000 1111 (即16) => 16-256 (即-241) System.out.println(c << 2);// 按位左移,结果为:0100 0000(即64);也可以相当于16*2的2次方=16*4=64 System.out.println(d >> 2);// 正数按位右移,结果为:0011 1100(即60);也可以相当于240/2的2次方=240/4=60 System.out.println(d2 >> 2);// 负数按位右移,结果为:1111 1111(即-1);也可以相当于-4/2的2次方=-4/4=-1 System.out.println(c >>> 2);// 无符号右移,结果为:100(即4);也可以相当于16/2的2次方=16/4=4 boolean flag1 = true; boolean flag2 = false; System.out.println(flag1 && flag2);// 逻辑与,全真出真,结果为:false System.out.println(flag1 || flag2);// 逻辑或,有真出真,结果为:true System.out.println(!(flag1 || flag2));// 逻辑非,真变假,假变真,结果为:flase int e = 0;// 赋值运算符 e += c;// 等价于e = e + c;结果为: 16 System.out.println(e); e -= c;// 等价于e = e - c;结果为:0 System.out.println(e); e *= c;// 等价于e = e * c;结果为:0 System.out.println(e); e /= c;// 等价于e = e / c;结果为:0 System.out.println(e); e %= c;// 等价于e = e % c;结果为:0 System.out.println(e); c <<= 2;// 等价于c = c << 2;结果为:0100 0000(即64) System.out.println(c); c >>= 2;// 等价于c = c >> 2;结果为:0001 0000(即16) System.out.println(c); c &= 1;// 等价于c = c & 1;结果为:0000 0000(即0) System.out.println(c); c ^= 1;// 等价于c = c ^ 1;结果为:0000 0001(即1) System.out.println(c); c |= 1;// 等价于c = c | 1;结果为:0000 0001(即1) System.out.println(c); int g = 1; char f = (g > 0) ? 'y' : 'n'; /*相当于: * int g = 1; char f; if(g > 0){ f = 'y'; } else{ f = 'n'; } */ System.out.println(f); // 变量 = 条件 ? 条件为真时的语句 : 条件为假时的语句; _05operator oper = new _05operator(); boolean result = oper instanceof _05operator;// oper属于_05operator类,返回true System.out.println(result); result = "字符串" instanceof String;// "字符串"属于String类型,返回true System.out.println(result); } }
输出结果为:
250
100b
-50
15000
0
100
0
100
102
102
100
false
false
true
true
false
true
16
240
224
-241
64
60
-1
4
false
true
false
16
0
0
0
0
64
16
0
1
1
y
true
true