一、运算符
运算:对常量和变量进行操作的过程称为运算
运算符:对常量和变量进行操作的符号称为运算符
操作数:参与运算的数据称为操作数
表达式:用运算符把常量或者变量连接起来的符号java语法的式子就可以称为表达式
不同运算符连接的式子体现的是不同类型的表达式
例:
int a=3+4;
这是做了一个加法运算,+就是运算符,我们还有其他很多的运算符
3,4就是参与运算的操作数据
3+4整体其实就是一个算数表达式
1.算数运算符
2.赋值运算符
符号:=,+=,-=,*=,/=,%=
其中=为基本赋值运算符,其他的为扩展的赋值运算符
扩展的运算符存在默认强制类型转换:s+=1等价于s=(short)s+1
3.比较(关系)运算符
注意:
比较运算符的结果都是boolean型,也就是要么true要么false
比较运算符"==“不能误写为”=",并且在赋值的时候要注意类型问题
4.逻辑运算符
逻辑运算符用于连接布尔型表达式,在java中不可以写成3<x<6,应该写成x>3 & x<6
"&“和”&&"的区别
单&时,左边无论真假,右边都进行计算
&&时,如果左边为真,则右边参与运算,如果左边为假,则右边不参与运算
"|“与”||"的区别同理,双或时,左边为真,右边不参与运算
异或为两边相同的时候为false,不同true
class Demo{
public static void main(String[] args){
int x = 3;
int y = 4;
System.out.println(x++>4)&(y++>5); //false
System.out.println(x); //4
System.out.println(y); //5
System.out.println(x++>4)&&(y++>5); //false
System.out.println(x); //4
System.out.println(y); //4
}
}
5.位运算符
位运算是直接进行二进制运算
基本位运算
位于运算&:特点为有0,则0
位或运算|:特点为有1,则1
位异或运算^:相同则为0,不同则为1
反码~:对当前数据二进制全部按位取反,0变1,1变0
class Demo{
public static void main(String[] args){
System.out.println(3 & 4) ; //3位与4 //0
System.out.println(3 | 4) ; //3位或4 //7
System.out.println(3 ^ 4) ; //3位异或4 //7
System.out.println(~3) ;//对3求反码 //-4
//~:对当前数据的进行按位取反
}
}
/*
对于位运算符号连接的两个具体的数据,先算出该数据---->二进值数据
3 : 11
4:100
3 & 4
位与运算符的特点:有0,则0
00000000 00000000 00000000 00000011
& 00000000 00000000 00000000 00000100
---------------------------------------------------
00000000 00000000 00000000 00000000
结果:0
位或|运算符的特点:有1,则1
00000000 00000000 00000000 00000011
| 00000000 00000000 00000000 00000100
---------------------------------------------------
00000000 00000000 00000000 00000111
结果: 7
位异或^运算符的特点:相同则为0,不同则为1
00000000 00000000 00000000 00000011
^ 00000000 00000000 00000000 00000100
---------------------------------------------------
00000000 00000000 00000000 00000111
结果:7
~3:反码3 对整数3按位取反(0变1,1变0)
~00000000 00000000 00000000 00000011 (原码,反码,补码一样)
11111111 11111111 11111111 11111100 (补码) 负数
-1
-----------------------------------------------
11111111 11111111 11111111 11111011 (反码) 负数
10000000 00000000 00000000 00000100 (原码)
- 4
*/
位异或运算的特点
一个数据对另一个数据位异或两次,其值是它本身
class Demo{
public static void main(String[] args){
//定义两个变量
int a = 10;
int b = 20;
System.out.println(a^b^b); //10
System.out,println(a^b^a); //20
}
}
位移运算符中:
左移 <<,规则:最高位丢掉,右边补0
右移>>,规则:如果最高符号位为1,左边补齐1,如果最高符号位为0,左边补齐0
无符号右移>>>,规则:无论最高符号位是0还是1,左边都补齐0
class OperatorDemo3{
public static void main(String[] args){
// 某个数据<< 位数 :当前该数据乘以2的移动次幂
System.out.println(3 << 2) ;//3 *2^2 = 12
//某个数据 >> 位数 :当前数据该本身除以2的移动次幂
System.out.println(24 >> 2);//24/2^2 = 6
System.out.println(-24 >> 2) ; //-6
//无符号右移
System.out.println(24 >>> 2);//6
System.out.println(-24 >>> 2);//1073741818
}
}
/*
运算的步骤:
1)算出当前数据对应的二进制数据
2)如果是正数,原码,反码,补码一样,使用补码进行移动 (>>,<<,>>>)
3对应的二进制数据
00000000 00000000 00000000 00000011 (原码,反码,补码)
使用补码进行移动
00000000 00000000 00000000 00000011
(00)000000 00000000 00000000 0000001100
00000000 00000000 00000000 00001100 (补码--->反码--->原码)
结果: 12
--------------------------
24 >> 2 :如果最高符号位为1,左边补齐1,如果最高符号位为0,则左边补齐0
二进制数据:
00000000 00000000 00000000 00011000 (正数: 原码--->反码--->补码)
00000000 00000000 00000000 00011000 向右移动2位
0000000000 00000000 00000000 000110(00)
00000000 00000000 00000000 00000110 (补码---->反码--->原码)
结果: 6
--------------------------
- 24 >> 2 负数,最高符号位为1
(原码) 10000000 00000000 00000000 00011000
(反码) 11111111 11111111 11111111 11100111
+1
------------------------------------------------
(补码) 11111111 11111111 11111111 11101000
11111111 11111111 11111111 11101000 向右移动2位
1111111111 11111111 11111111 111010(00)
(补码) 11111111 11111111 11111111 11111010
-1
(反码) 11111111 11111111 11111111 11111001
(原码) 10000000 00000000 00000000 00000110
结果 : - 6
--------------------------
24>>> 2
00000000 00000000 00000000 00011000 (原码---反码---->补码)
00000000 00000000 00000000 00011000
0000000000 00000000 00000000 000110(00)
00000000 00000000 00000000 00000110(补码---->反码---->原码)
6
--------------------------
-24 >>> 2
(原码) 10000000 00000000 00000000 00011000
(反码) 11111111 11111111 11111111 11100111
+1
------------------------------------------------
(补码) 11111111 11111111 11111111 11101000
无符号右移
11111111 11111111 11111111 11101000
0011111111 11111111 11111111 111010(00)
00111111 11111111 11111111 11111010(补码---->反码---->原码一样)
结果:1073741818
*/
6.三目运算符
格式:
(表达式)?表达式1:表达式2
执行流程:
先判断表达式是true还是false,如果true,执行表达式1的结果,否则,执行表达式二的结果
class Demo{
public static void main(String[] args){
int a = 23;
int b = 36;
int max = (a>b)?a:b;
System.out.println("max:"+max);
}
}
键盘录入数据
我们目前在写程序的时候,数据值都是固定的,但是实际开发中,数据值肯定是变化的,所以,把数据改进为键盘录入,提高程序的灵活性
如何实现键盘录入数据?
实现步骤:
- 导包(位置放到class定义的上面)
import java.util.Scanner; - 创建对象
Scanner sc = new Scanner(System.in); - 接收数据
int x = sc.nextInt();
import java.util.Scanner;
class LianXi3{
public static void main(String[] args){
Scanner s=new Scanner(System.in);
System.out.println("将对三个数据进行比较,取最大值");
System.out.println("请输入第一个数据");
int a=s.nextInt();
System.out.println("请输入第二个数据");
int b=s.nextInt();
System.out.println("请输入第三个数据");
int c=s.nextInt();
int max=(a>b)?(a>c?a:c):(b>c?b:c);
System.out.println("最大数:"+max);
}
}