运算符基础1
运算符
优先级 ()多用有好处
- 算数运算符:+,-,*,/,%(模运算,取余数),++,--
- 赋值运算符:= (int a = 10; 叫做把10赋值给a)
- 关系运算符:>,<,>=,<+,==(判断相等否),!=(判断不等于)
- 逻辑运算符:与 (&&) 或 (||) 非(!)
- 位运算符:&,|,^,~,>>,<<,>>>(了解即可)
- 条件运算符:? :
- 扩展赋值运算符:+=,-=,*=,/=
Package
- 包既是文件夹,右键src新建Package,命名为Operator,这里新建Demo01名称与上一个包不冲突
- 把之前的Demo放到base里
算数运算符
- 快捷操作 ctrl+D 复制当前行到下一行
- 注意除法时会出现小数,我们之前学到,两个int 值计算会默认输出int值,所以需要强制转换成小数类型,否则默认取整
package operator;
public class Demo01 {
public static void main(String[] args) {
//二元运算符
//ctrl+D 复制当前行到下一行
int a = 10;
int b = 20;
int c = 30;
int d = 40;
int e = 50;
System.out.println(a+b);
System.out.println(a*b);
System.out.println(a/b);//显示结果0,int类型的两个数算出0.5,被整数类型int取整数
//这个需要强制转换
System.out.println((float)a/b);//!!!这样就输出0.5
}
}
- 数值计算,优先输出相加数里的最高级类型,如果需要其他低级类型,需要强制转换
- 注意点:误点insert输入
关系运算符
- 关系运算符返回结果是判断正误 :正确 错误 (判断结束,通过布尔值表示)
package operator;//包名
public class Demo03 {
public static void main(String[] args) {
//关系运算符返回结果:正确 错误(判断结束,通过布尔值表示)
int a = 10;
int b = 20;
System.out.println(a>b);//大于,false
System.out.println(a<b);//小于 true
System.out.println(a==b);//等于 false
System.out.println(a!=b);//!也分中西文输入法
}
}
模运算
- 取余运算 21/10=2......1 取余数1
package operator;//包名
public class Demo03 {
public static void main(String[] args) {
int a = 10;
int c = 21;
//取余,也叫模运算
System.out.println(c%a);//c/a 21/10 =2....1 取余数1
}
}
自增自减++ --
- 自增 自减 看作一元运算符
- ++a :执行 int c = ++a; 这行代码前,a先自增1,再给c赋值
package operator;
public class Demo04 {
public static void main(String[] args) {
int a = 3;
//先隐藏执行++a a=a+1 由3自增为4
int c = ++a;//++a a=a+1 执行时机不同 ++a是执行 这行代码前,先自增,再给c赋值
System.out.println(c);//后赋值输出4
//幂运算 2^3=2*2*2
double pow = Math.pow(2, 3);//alt +回车,自动补全前面的double pow =
System.out.println(pow);
}
}
-
a ++ : int b = ++a;这行代码后,即先给b赋值,a再自增1
package operator; public class Demo04 { public static void main(String[] args) { //自增 int a = 3; int b = a++;//执行完这行代码后,先给b赋值,再自增 //隐藏执行了a++ 就是 a=a+1 这里可以看作是隐藏了这一行代码,即int b = a++;执行完a才加1 System.out.println(b);//先赋值输出3 System.out.println(a);//后自增输出4 //此时a=4 //先隐藏执行++a a=a+1 由4自增为5 int c = ++a;//++a a=a+1 执行时机不同 ++a是执行 这行代码前,先自增,再给c赋值 System.out.println(c);//后赋值输出5 System.out.println(a);//输出5 //幂运算 2^3=2*2*2 double pow = Math.pow(2, 3);//alt +回车,自动补全前面的double pow = System.out.println(pow); //自减 int d = 5; int e = d--;//先赋值e=5,再自减d=4 System.out.println(e);//输出5 System.out.println(d);//输出4 //此时d=4 int f = --d;//先自减d=3,再赋值f=3 System.out.println(f);//输出3 //此时d=3 } }
逻辑运算符
-
与 : a&&b 逻辑与 运算:两个变量都为真,结果为真
-
或 :a||b 逻辑或 运算:两个变量有一个为真,结果为真
-
非 :! (a&&b) 逻辑非 运算:两个变量都为假,结果为真
package operator; //逻辑运算符 public class Demo05 { public static void main(String[] args) { boolean a = true; boolean b = false; System.out.println("a&&b:"+(a&&b));//输出 a&&b:false System.out.println("a||b:"+(a||b));//输出 a||b:true System.out.println("!(a&&b):"+!(a&&b));//输出 !(a&&b):false //短路运算 System.out.println("a&&b:"+(b&&a));//b一上来就假,短路直接返回假 int c = 5; boolean d = (c<4)&&(c++<4);//c<4=false,后面不执行 System.out.println(d);//毫无疑问输出false, System.out.println(c);//在c<4处短路,所以后面的c++不再执行,此时c无自增,所以c输出5 } } -
短路运算
- 判断逻辑与时,若前面先被判断为false,则不执行后面的代码
package operator; //逻辑运算符 public class Demo05 { public static void main(String[] args) { boolean a = true; boolean b = false; //短路运算 System.out.println("a&&b:"+(b&&a));//b一上来就假,短路直接返回假 int c = 5; boolean d = (c<4)&&(c++<4);//c<4=false,后面不执行 System.out.println(d);//毫无疑问输出false, System.out.println(c);//在c<4处短路,所以后面的c++不再执行,此时c无自增,所以c输出5 } } -
对照
- 输出结果
位运算
-
位运算效率极高,其也是比较与或非关系
-
左移与右移
首先了解一下二进制
<< 左移(箭头指向左) 数字*2
<<右移(箭头指向右) 数字/2
package operator;
public class Demo06 {
public static void main(String[] args) {
/*
A = 0011 1100
B = 0000 1101
-------------------------------------------------------------------
A&B=0000 1100 位运算,0假1真,&运算:全1为真,其余为假(指上下对应的)
A|B=0011 1101 有1为真,全0则假
A^B=0011 0001 亦或 相同为0,不同为1
~B =1111 0010 取B的完全相反,与A无关
-----------------------------------------------
2*8=16 2*2*2*2
位运算效率极高!
<< 左移(箭头指向左) 数字*2
在二进制 代表
0000 0000 0
0000 0001 1
0000 0010 2 0000 0011 3
0000 0100 4
0000 1000 8
0001 0000 16
>> 右移(箭头指向右) 数字/2
*/
System.out.println(2<<3);//16
System.out.println(16>>4);//1,除四次2
}
}
字符串连接符
- 在+两侧出现String类型(即字符串类型)就会把另一个类型都转换成String类型然后连接起来
- 可以在拼接输出时使用
- 注意点、
- System.out.println(a+b+"");//这个会先运行a+b,不会被转换成String类型输出
package operator;
public class Demo07 {
public static void main(String[] args) {
int a = 10;
int b =20;
a+=b;//a=a+b
System.out.println(a);//30
//此时a为30
a-=b;//a=a-b=30-20=10
System.out.println(a);//10
//字符串连接符
//拼接输出时候使用
// + 在+两侧出现String类型(即字符串类型)就会把另一个类型都转换成String类型然后连接起来
System.out.println(a+b);//30
System.out.println(""+a+b);//1020 把a和b连接起来了
System.out.println(a+b+"");//30 先运行了+
System.out.println(a+"爱你"+b);//10爱你20
}
}
三元运算符
package operator;
public class Demo08 {
public static void main(String[] args) {
//三元运算符
/* x ? y :z
如果x==true,则结果为y,否则结果为z
*/
int score1 = 80;
int score2 = 59;
String type1 = score1 < 60 ? "不及格" : "及格";
String type2= score2 < 60?"不及格":"及格";//:也分中西文
System.out.println(type1);//及格
System.out.println(type2);//不及格
}
}

浙公网安备 33010602011771号