运算符Operator
public class Operator{
public static void main(String args[]){
System.out.println(12/3);//4
System.out.println(12%5);//2
System.out.println(12/3.0);//4.0
System.out.println(12%5);//2.0
}
}
实现功能:任意给出一个四位数,求出每位上的数字
import java.util.Scanner;
public class TestOpe{
public static void main(String args[]){
System.out.print("请输入一个四位数:");
Scanner sc=new Scanner(System.in);
int num=sc.nextInt();
System.out.println("千位数是:"+num/1000);
int num2=num%1000;
System.out.println("百位数是"+num2/100);
int num3=num2%100;
System.out.println("十位数是"+num3/10);
int num4=num3%10;
System.out.println("个位数是"+num4);
}
}
“+”的作用
1、表示正数
2、表示相加操作
3、进行字符串的拼接
注意:字符串加字符还是字符串 字符串的拼接:若加号左右两侧的任意一侧有字符串,那么这个加号就是字符串拼接的作用,结果一定是字符串
System.out.println(+5);
System.out.println(5+6);//相加操作 11
System.out.println(5+'6');//‘6’在底层的码是54,所以59
//字符串的拼接:若加号左右两侧的任意一侧有字符串,那么这个加号就是字符串拼接的作用,结果一定是字符串
System.out.println(5+6+"7");//117
System.out.println(5+'6'+"7");//597
System.out.println("5"+6+"7");//567
System.out.println("5"+'6'+"7");//字符串加字符还是字符串,“56”+“7”----->567
System.out.println("5"+'6'+'7');//567
++自增符号 --自减符号
int a=5;
a++;//理解为相当于 a=a+1操作;
System.out.println(a);
a=5;
++a;
System.out.println(a);
//如果++在后u,先运算,后加一;如果++在前,先加一,后运算
a=5;
int m=a++ +7;
System.out.println("m="+m);//输出12
System.out.println(a);
a=5;
int n=++a +7;
System.out.println("n="+n);//输出13
System.out.println(a);
运算符有优先级问题:++ > +
int a=5;
System.out.println(a++ + a++);//5+6=11;a=7
System.out.println(a++ + ++a);//7+9=16;a=9
System.out.println(++a + a++);//10+10=20;a=11
System.out.println(++a + ++a);//12+13=25;a=13
=作用:将等号右侧的值赋给等号左侧;
两个变量交换的四种方法
1、引入一个中间变量(见上图)
2、可以用两个数求和然后相减的方式进行数据交换,弊端在于如果x和y的数值过大,超出int的值会损失精度
int x=5,y=50;
x=x+y;
y=x-y;
x=x-y;
System.out.println(x);
System.out.println(y);
3、利用位运算的方式进行数据交换,思想是:一个数异或同一个数两次,结果还是那个数,而且不会超出int范围
int x=5,y=50;
x=x^y;
y=x^y;//y=(x^y)^y=x
x=x^y;//x=(x^y)^x=y
System.out.println(x);
System.out.println(y);
4、最简单的,直接通过打印语句进行交换
System.out.print(“x=”+y+" y="+x);
实现功能给出三个数求和:记住这种实现方式
int sum=0,num1=10,num2=20,num3=30;
sum=sum+num1;//sum+=num1;
sum=sum+num2;//sum+=num2;
sum=sum+num3;//sum+=num3;
System.out.println(sum);
a+=b和a=a+b的区别
1、a+=b可读性稍差,编译效率高
2、a=a+b可读性较好,编译效率低
面试题:请问a+=b想当于a=a+b,那么也相当于a=b+a吗?
对于基本数据类型来说没有区别,但是对String类型就不一样了
逻辑运算符:&(逻辑与) |(逻辑或) &&(短路与) ||(短路或) !(逻辑非) ^(逻辑异或):
进行逻辑运算的,运算符左右链接的都是布尔类型的操作数,最终表达式的结果是布尔值,要么true,要么false
&和&&的区别:&&如果第一个就是false的话,结果直接为false,效率高;或同理
异或: 两个操作数一样,结果为false;两个操作数不一样结果为true
条件运算符(三元/三目运算符): a ? b :c
其中a是一个布尔类型的表达式,返回结果要么是true要么是false,通过a的结果决定最终表达式的结果:
如果a的结果是true,那么表达式最终结果为b
如果a的结果是false,那么表达式最终结果为c
三目运算符可以代替 if else
位运算符:&, | , ^ , ~ , >> , << , >>>
如何区分逻辑运算符和位运算符
逻辑运算符:左右链接的是布尔类型的操作数
位运算符:左右链接的是具体的数值
1、<< 左移 如:3<<2=? 意思是 3这个数左移两位,得到的是几
,
3<<2=12
每左移一位相当于乘以2,即3*4
面试题:4乘以8最快的方式是 4<<3
2、 >> 有符号右移
6>>2=1,符号位原来为0,现在移位后也为0,右移相当于除;6/2/2取整
-6>>2= -2
3、>>> 无符号右移
6>>>2=1
4、&与 6&3=2
5、| 或 6|3=7
6、异或^ 6^3=5
7、反~,单目运算符
~6=-7
运算符的优先级