运算符
运算符就是对常量和变量进行操作的特号。
运算符的分类
算术运算符,赋值运算符,比较(关系或条件)运算符,逻辑运算符,位运算符,三目(元)运算符
算数运算符
算数运算符:+ - × / % ++ --
+
号在java中有三种作用,代表正号,做加法运算,字符串的连接符- 整数相除只能得到整数。如果想得到小数,必须把数据变化为浮点数类型
/
获取的是除法操作的商,%获取的是除法操作的余数%
- 左边小于右边,结果是左边
- 左边等于右边,结果是0
- 左边大于右边,结果是余数
- 余数的正负,取决于左边的正负
- 应用:%2 (结果是0,1)
public class Dome_Operator { //operator运算符
public static void main(String[] args){
System.out.println(10/3); //整数相除结果只能是整数
System.out.println(10/3.0); //如果想得到小数,把其中一个数变成小数
System.out.println(-5% 5);
System.out.println(13%-5);
}
}
输出结果:
++,--
-
单独使用,放在操作数前后结果一样。 a++;++a;
-
参与操作(运算,赋值,打印)时,放在操作数的前面,数据本身改变,再参与操作。
int a = 12; b = ++a; //a=13,b=13;
-
参与操作(运算,赋值,打印)时,放在操作数的后面,数据先进行临时存储,数据本身改变,最后将存储的数据进行赋值。
int a = 12; b = a++; //a=13,b=12;
-
public class Dome_Operator1 {
public static void main(String[] args) {
int x=4;
// 4 + 6 + 60
int y=(x++)+(++x)+(x*10);
System.out.println("x="+x+",y="+y); //输出结果为x=70
byte b = 10;
b++; //b=(byte)(b+1)
b=b+1;
System.out.println("b="+b); /*当byte与int进行混合运算的时候,会提升为int类型,
两个int相加的结果还是int,赋值给byte会损失精度*/
}
}
注意:b++
不等于b=b+1
b++相当于b=(byte)(b+1)
赋值运算符
赋值运算符:=,+=,-=,×=,/=,%=
int x = 3; //把3赋值给int类型变量x
x += 3; //x = x + 3; 把左边和右边相加赋给左边。
注意:左边必须是变量
关系运算符
关系运算符 ==,!=,>,>=,<,<=
比较运算符的结果都是boolean型,也就是要么是true,要么是false
System.out.println(3==3); 结果是true
System.out.println(3!=3); 结果是false
逻辑运算符
&,|,^,!,&&,||
- 逻辑运算符一般用于连接boolean类型的表达式或者值。
- 表达式:就是用运算符把常量或者变量连接起来的符合java语法的式子。
- 算术表达式:a + b
- 比较表达式:a == b(条件表达式)
&
逻辑与:有false则false。
|
逻辑或:有true则true。
^
逻辑异或:相同为false,不同为true。
!
逻辑非:非false则true,非true则false。
&&,||
&&
和&
的区别?- 最终结果一样。
&&
具有短路效果。左边是false,右边不执行。- &是无论左边是false还是true,右边都会执行
||
同理&&
开发中常用&&,||,!
位运算符
位运算符有&,|,^,~ ,>>,>>>,<<
&,|,^,~
的用法
&
:有0则0
|
:有1则1
^
:相同则0,不同则1
~
:按位取反
public class Dome_Operator2 { //位运算符
public static void main(String[] args){
System.out.println(5&9); //1
System.out.println(5|9); //13
System.out.println(5^9); //12
/*
0101 0101 0101
& 1001 | 1001 ^ 1001
---------- ---------- ----------
0001 1101 1100
*/
System.out.println(~5); //-6
/*
00000000 00000000 00000000 00000101 5的原反补码
~ 11111111 11111111 11111111 11111010 按位取反得到的补码
- 00000000 00000000 00000000 00000001
-----------------------------------------
11111111 11111111 11111111 11111001 减一得到反码
10000000 00000000 00000000 00000110 得到结果
*/
}
}
位异或运算符的特点:一个数据对另一个数据位异或两次,该数本身不变。
题目:实现两个整数变量的交换
package com.fxz.studyday02;
public class Dome_Operator3 {
public static void main(String[] args){
//实现两个整数变量的交换
//使用第三方变量(推荐开发使用)
int a=10;
int b=55;
int temp=a;
a= b;
b=temp;
System.out.println("a="+a);
System.out.println("b="+b);
//不使用第三方变量(有弊端)
int m=99;
int n=39;
m=m+n;
n=m-n;
m=m-n;
System.out.println("m="+m);
System.out.println("n="+n);
//不使用第三方变量,用^实现(应用于加密)
int x=65;
int y=34;
x=x^y;
y=x^y;
x=x^y;
System.out.println("x="+x);
System.out.println("y="+y);
}
}
^
常用于加密
<<
左移 就是将左边的数在内存中的二进制数据左移右边数的位数,右边被移空的部分补0。
相当于乘与2的移位数次幂
2<<4-----2*2^4
>>
右移 右移稍微复杂一点,如果最高位是0,左边被移空的位就填入0;如果最高位是1,左边被移空的位就填入1。相当于除以2的移位数次幂
>>>
无符号右移 无论最高位是1还是0,左边被移空的高位都填入0。
三元运算符
三元运算符的格式:
- (关系表达式) ? 表达式1 : 表达式2;
- 如果条件表达式为true,运算后的结果是表达式1;
- 如果条件表达式为false,运算后的结果是表达式2;
键盘录入
- :为什么要使用键盘录入数据
- a:为了让程序的数据更符合开发的数据
- b:让程序更灵活一下
- 如何实现键盘录入呢?
- 导包
- 格式:
import java.util.Scanner;
- 位置:
在class
上面。
- 格式:
- 创建键盘录入对象
- 格式:
Scanner sc = new Scanner(System.in);
- 格式:
- 通过对象获取数据
- 格式:
int x = sc.nextInt();
- 格式:
- 导包
-
案例演示
- 键盘录入练习:键盘录入两个数据,并对这两个数据求和,输出其结果
-
案例演示
- 键盘录入练习:键盘录入两个数据,获取这两个数据中的最大值
-
案例演示
- 键盘录入练习:键盘录入两个数据,比较这两个数据是否相等
-
案例演示
- 键盘录入练习:键盘录入三个数据,获取这三个数据中的最大值
import java.util.Scanner; //导入包中的类Scanner
public class Dome_Scanner {
public static void main(String[] args){
Scanner sc=new Scanner(System.in); //创建键盘录入对象
System.out.println("输入第一个整数:");
int x=sc.nextInt();
System.out.println("输入第二个整数:");
int y=sc.nextInt();
System.out.println("输入第三个整数:");
int z=sc.nextInt();
int num=x+y;
System.out.println("num="+num); //键盘录入两个数据并对这两个数据求和,输出结果
int max1=(x>y)?x:y;
System.out.println("两数最大值为:"+ max1); //键盘录入两个数据,获取这两个数据中的最大值
boolean b=(x==y);
System.out.println("两数是否相等"+ b); //键盘录入两个数据,比较这两个数据是否相等
int max2=(max1 > z)?max1:z;
System.out.println("三个数最大值为:"+ max2);//键盘录入三个数据,获取这三个数据中的最大值
}
}
输出结果: