day05:运算符,Scanner
一、运算符
-
赋值:=、+=、-=、*=、/=、%=
-
简单赋值运算符:=
-
扩展赋值运算符:+=、-=、*=、/=、%=
-
注意:扩展赋值运算符自带强转功能
int a = 5; a += 10;//相当于a=(int)(a+10) System.out.println(a);//15 a *= 2;//相当于a=(int)(a*2) System.out.println(a);//30 a /= 6;//相当于a=(int)(a/6) System.out.println(a);//5 //小面试题 short s = 5; //s = s+10;//编译错误,需要强制转换,改为:s=(short)(s+10) s +=10;//相当于s=(short)(s+10)
-
-
字符串连接:+
-
若两边为数字,则做加法运算
-
若两边出现了字符串,则做字符串连接
int age = 22; System.out.println("age=");//age= System.out.println(age);//22 System.out.println("age="+age);//age=22 System.out.println("我今年"+age+"岁了");//我今年22岁了 String name = "WJH" System.out.println("大家好,我叫"+name);//大家好,我叫WJH System.out.println("大家好,我叫"+name+",今年"+age+"岁了");//大家好,我叫WJH,今年22岁了
-
任何类型的数据与字符串连接,结果都会变为字符串型
System.out.println(10+20+""+30); //30 30---------String System.out.println(""+10+20+30); //102030-------String System.out.println(10+20+30+""); //60-----------String
-
-
位运算符
对整型数字做运算,基于二进制来运算的
& | ^ ~ << >> >>>
-
&:按位与 1 true 0 false
0 & 1 =0 0 & 0 =0 1 & 0 =0 1 & 1 =1
2&3 2:0010 3:0011 &:0010 = 2
-
|:按位或
0 | 1 = 1 0 | 0 = 0 1 | 1 = 1 1 | 0 = 1
-
^按位亦或
1 ^ 1 = 0 0 ^ 0 = 0 1 ^ 0 = 1 0 ^ 1 = 1
一个数异或另外一个数两次结果还是该数本身
交换两个整数变量的值
方式一:通过第三个变量
int i =3; int j =4; int k =i; i = j; j = k; System.out.println(i+","+j)
方式二:^来实现
int i =3; int j =4; i = i ^ j; j = i ^ j; i = i ^ j; System.out.println(i+","+j)
方式三:求和的方式(无需创建第三个变量)
int i = 3; int j = 4; i = i + j; //i = 11 j = i - j; //11-6=5 i = i-j; // 11-5=6 System.out.println(i+","+j)
-
~按位取反
单目运算符
~0=1 ~1=0
正数:原码=反码=补码
负数:
原码:十进制转二进制的方式最高位符号位
反码:符号不变,其余各位取反
补码:反码的基础+1
~i=-i-1
-
<<
直接将数字的二进制的形式向左移动相应的位数,左侧移出去的直接舍弃,右侧空出来的补0;符号位保持不变;
a<<b:a*2^b
-
>>
直接将数字的二进制的形式向右移动相应的位数,右侧移出去的直接舍弃,左侧根据符号位来补;
a>>b:a/(2^b)
-
>>>
直接将数字的二进制的形式向右移动相应的位数,右侧移出去的直接舍弃,左侧补0;
对于正数和右移的结果一致;负数做无符号右移后效果一样
-
-
三目运算符:boolean?数1:数2
-
语法:
- boolean?数1:数2
-
执行过程
-
整个条件运算是有值的,它的值要么是?号后的数1,要么是:后的数2
-
计算boolean的值:
-
若为true,则整个表达式的值为?后面的数1
-
若为false,则整个表达式的值为:后面的数2
int num = 5; int flag = num>0?1:-1; System.out.println(flag); //1 int a=8,b=5; int max = a>b?a:b; System.out.println("max="+max); //max=8
案例:判断数字是奇数还是偶数
int num = 6; String str = num % 2 == ?奇数:偶数
-
-
-
-
二、Scanner
-
获取用户从键盘输入的数据
-
导包,指定Scanner类所属的包
java.util.Scanner;
语句:Import类的包路径
位置:类的上面,包的下面
-
创建Scanner类的对象
语句:Scanner scan = new Scanner(System.in);
scan:对象名 变量名 引用名
-
调用对象的方法(功能)
获取整型数字 nextInt()
获取字符串 next()
调用方法的格式:对象名.方法名
-
-
next()和nextLine()的区别
- next()读取输入数据时,遇到空格等空白字符就默认本次数据输入结束
- nextLine()读取输入的数据时,遇到回车换行才认为是结束