1.运算符的含义:
对字面量或者变量进行操作的符号;
2.表达式的含义:
用运算符把字面量或者变量连接起来,符合java语法的式子就可以称为表达式(不同运算符链接的表达式体现的是不同的类型的表达式)
例:
public class IT梦{
public static void main(String[] args){
int a=10;
int b=20;
int c=a+b;
//+就是运算符,且是算术运算符
//a+b就是表达式,因为用算数运算符连接,所以叫算数表达式
}
}
3.算数运算符(小学数学):
1. + 加2. – 减3. * 乘4. / 除5. % 取模,取余
代码演示:
public class IT梦{
public static void main(String[] args){
System.out.print(1+3+" ");
System.out.print(6-6+" ");
System.out.print(9*1+" ");
System.out.print(18/3+" ");
System.out.print(15%6);
}
}
结果:
注:
1.整数参与计算,结果只能得到整数;2.如果有小数参与计算,结果有可能是不精确的;3.数字在进行运算时,数据类型不一样是不能进行计算的,需要转化成一样的才可以运算(后面会讲如何转换);
算数运算符小练习:
键盘录入一个三位数,获取其中的个位,十位,百位(记得自己先写一遍再看答案哦)
答案:
import java.util.Scanner;
public class IT梦 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个三位数");
int number=sc.nextInt();
int ge=number%10;
int shi=number/10%10;
int bai=number/100%10;
System.out.println("个位是"+ge);
System.out.println("十位是"+shi);
System.out.println("百位是"+bai);
}
}
4.类型转换的分类:
1. 隐式转换(自动类型提升):把取值范围小的数值——>取值范围大的数值(不需要我们写代码,程序帮我们自动实现)
例:
public class IT梦 {
public static void main(String[] args) {
int a=10;
double b=a;
System.out.println(b);
}
}
注:
1.取值范围小的和取值大的进行计算时,小的会先提升为大的,再进行计算2.byte short char 三种类型的数据在运算的时候,都会直接提升为int,然后在进行运算
2.强制转换:
1.把取值范围大的数值——>取值范围小的数值(需要我们手动写代码进行转换)格式:目标数据类型 变量名=(目标数据类型)被强制转换的数据
例:
public class IT梦 {
public static void main(String[] args) {
double a=12.3;
int b=(int)a;
System.out.println(b);
}
}
字符串的”+”操作:
1.当”+”操作中出现字符串时,这个”+”是字符串连接符,就不是算数运算符了,会将前后的数据进行拼接,并产生一个新的字符串;2.连续进行”+”操作时,会从左到右依次进行;
字符的”+”操作”:
1.当字符+字符或者字符+数字时,会把字符通过ASCII码表查询到对应的数字在进行计算;
自增自减运算符:
1. ++ 加 说明:变量的值+12. — 减 说明:变量的值-1注意事项:++和–既可以写在变量的前面,也可以写在变量的后面;
代码演示:
public class IT梦 {
public static void main(String[] args) {
int a=10;
a++;
System.out.println(a);
}
}
赋值运算符:
1. = 赋值 int a=10,将10赋值给变量a;2. += 加后赋值 a+=b,将a+b的值赋值给a;3. -= 减后赋值 a-=b,将a-b的值赋值给a;4. *= 乘后赋值 a*=b,将a*b的值赋值给a;5. /= 除后赋值 a/=b,将a/b的商赋值给a;6. %= 取余后赋值 a%=b,将a/b的余数赋值给a;注意事项:这些赋值运算符底层都隐藏了一个强制类型转换;
代码演示:
public class IT梦 {
public static void main(String[] args) {
//以+=为例
int a=10;
int b=20;
a+=b;
System.out.println(a);
System.out.println(b);
}
}
关系运算符(比较运算符):
1. == a == b,判断a和b的值是否相等,成立为true,不成立为false;2. != a!=b,判断a和b的值是否不相等,成立为true,不成立为false;3. > a>b,判断a是否大于b,成立为true,不成立为false;4. >= a>=b,判断a是否大于等于b,成立为true,不成立为false;5. < a<b,判断a是否小于b,成立为true,不成立为false;6. <= a<=b,判断a是否小于等于b,成立为true,不成立为false;
代码演示:
public class IT梦 {
public static void main(String[] args) {
//以==为例
int a=10;
int b=20;
boolean result=a==b;
System.out.println(result);
}
}
注意事项:
关系运算符的结果都是boolean(布尔)类型,要么是true,要么是false;
逻辑运算符:
1. & 逻辑与(且) 并且, 两边都是真,结果才是真;2. | 逻辑或 或者, 两边都是假,结果才是假;3. ^ 逻辑异或 相同为false,不同为true;4. ! 逻辑非 取反;
代码演示:
public class IT梦 {
public static void main(String[] args) {
//以&为例
System.out.println(true&true);
System.out.println(false&false);
System.out.println(true&false);
System.out.println(false&true);
}
}
短路逻辑运算符:
1. && 短路与 结果与&相同,但是有短路效果;2. || 短路或 结果与|相同,但是有短路效果;
代码演示(短路效果):
public class IT梦 {
public static void main(String[] args) {
//以&&为例
int a=10;
int b=10;
boolean result= a++<5 && b++<5;
System.out.println(result);
System.out.println(a);
System.out.println(b);
/*短路的意思就是程序会先判断左边的,如果左边的代码已经能知道结果了,
那就不需要在执行后面的代码了,可以直接得出结果*/
}
}
解释:&&表示短路与(且)的意思,变量a=10,再自增一次肯定大于5,所以a++<5的结果是false,因为&&需要两边都是true,结果才是true,所以最后的结果result已经知道了就是false,那么b++<5就不会执行,所以最终b的值并没有自增,还是10;
注意事项:
1. 单个的& 和 | ,无论左边是true还是false,右边都要执行;2. && 和 || , 如果左边能确定整个表达式的结果,右边就不会执行(这就是短路效果);3. &&:左边是false,右边不管是真还是假,整个表达式的结果一定是false;4. ||:左边是true,右边不管是真还是假,整个表达式的结果一定是true;
好处:可以提高代码运行的效率;
三元运算符(三元表达式);
格式:关系表达式 ? 表达式1 : 表达式2;解释:如果关系表达式的结果为true,那么就会执行表达式1;如果关系表达式的结果为fales,那么就会执行表达式2;
代码演示:
public class IT梦 {
public static void main(String[] args) {
//求两个数哪个更大;
int a=10;
int b=20;
int result=a>b?a:b;
System.out.println(result);
}
}
运算符优先级:
只需要记住( )里的优先于所有就可以了;
代码演示:
public class IT梦 {
public static void main(String[] args) {
int a=10;
int b=1;
int c=3;
int result=(a+b)*3;
System.out.println(result);
}
}
原码,反码和补码:
1. 原码:十进制数据的二进制表现形式,最左边的符号位,0为正,1为负;2. 反码:正数的反码是其本身,负数的反码就是符号位保持不变,其余位取反(0变1,1变0);3. 补码:正数的补码是其本身,负数的补码是在其反码的基础上+1;注:计算机中的存储和计算都是补码的形式进行的
例:
原码: 56—–>00111000(左边第一位为符号位,0为正,1为负);
原码的弊端:
利用原码对正数进行计算是不会有问题的,但是如果是负数计算,结果就会出错,实际运算的结果跟我们预期的结果是相反的
补充:
一个0或者1我们称之为一个bit(比特位),8个bit为一个字节;字节是我们计算机中最小的存储单元;
byte类型:1个字节,8个bit位;
short类型:2个字节,16个bit位;
int类型:4个字节,32和bit位;
long类型:8个字节,64个bit位;