第三天
【第一天】黑马程序员Java学习
https://blog.csdn.net/2301_80057424/article/details/147375491?spm=1001.2014.3001.5501
【第二天】黑马程序员Java学习
https://blog.csdn.net/2301_80057424/article/details/147462985
前提:纯记录。防止忘记找不到。
一、算数运算符
- 小tips:创立好一个类后,输入psvm+Tab键可以快速创建一个主入口
加减乘
public class ArithmeticoperatorDemo1 {
public static void main(String[] args){
//+
System.out.println(5+3);
//-
System.out.println(5-3);
//*
System.out.println(5*3);
//在代码中,如果有小数参与,结果有可能不精确
System.out.println(1.1+1.1); //2.2
System.out.println(1.1+1.01); //2.1100000000000003
}
}
除以、取模
public class ArithmeticoperatorDemo2 {
public static void main(String[] args) {
//结论:
//1. 整数参与计算,结果只能得到整数
//2. 小数参与计算,结果有可能是不精确的,如果需要精确,需要后面的知识点
//除法
System.out.println(10/5); //5
System.out.println(10/3); //3
System.out.println(10.0/3); //3.3333333333333335
//取模,得到的是余数
System.out.println(10%5); //0
System.out.println(10%3); //1
}
}
//应用场景:
// 1. 可以用来判断A是否能被B整除
// 2. A % 2:如果结果是0,证明A是偶数,否则证明是奇数
// 3. 斗地主发牌
// 三个玩家,把每一张牌都定义一个序号
//拿着序号 % 3,如果结果是1,发给第一个玩家,以此类推
二、隐式转换和强制转换
数字进行运算时,数据类型不一样不能运算,需要转换成一样的数据类型。
(一)隐式转换(自动类型提升):取值范围小的数值转换成取值范围大的数值
两种提升规则:
- 取值范围小的和取值范围大的进行运算时,小的会先提升为大的,再进行运算。
- byte、short、char三种类型的数据在运算的时候,都会直接先提升为int,然后再进行运算
即:byte+byte会生成int类型。
(二)强制转换:取值范围大的数值转换成取值范围小的数值
格式:目标数据类型 变量名=(目标数据类型)被强转的数据;
问题:当转换的数据过大时,可能会造成数据错误。
package com.itheima.arithmeticoperator;
public class ArithmeticoperatorDemo3 {
public static void main(String[] args) {
byte a1=10;
byte a2=20;
byte result1 = (byte)(a1 + a2);
System.out.println(result1); //30
byte b1=100;
byte b2=100;
byte result2 = (byte)(b1 + b2);
System.out.println(result2); //-56,超出范围,数据错误
}
}
三、字符串""和字符’'的加操作
- 注意字符串是双引号,字符是单引号,字符串只有“ + ”操作
(一)字符串的“ + ”操作
- 当“ + ”操作中出现字符串时,拼接起来
例如:“123”+123----> “123123” - 连续进行“ + ”操作时,从左到右逐个执行
例如:
1 + 99 +“年黑马”----> “100年黑马”
1 + 2 + “abc” + 1 + 2----> “3abc12”
(二)字符的“ + ”操作
当 字符 + 字符或者字符 + 数字时,会把字符通过ASCII码表查询到对应的数字再进行计算
例如:
1+‘a’---->98
‘a’+“abc”---->“aabc”
四、自增自减运算符
++ 和 – 可以放在变量的前边还是后边,结果都一样
(一)应用场景:
- 生日后年龄变换
- 增加减少网上购物车
- 统计人数
(二)计算的不同
- ++a:先自加再用
- a++:先用再自加
五、赋值运算符
细节:+=、-=、*=、/=、%=底层都隐藏了一个强制类型转换
package com.itheima.assigningoperator;
public class assigningoperatorDemo1 {
public static void main(String[] args) {
short s=1;
s+=1;
//等同于:s=(short)(s+1),这个转换类型是看左边的s是怎么类型
System.out.println(s); //2
}
}
六、关系运算符
注意:关系运算符的结果都是布尔类型,要么是true要么是false。
七、逻辑运算符
应用场景:
- 对比输入的密码是否和正确的密码相同
- 只要有一个房子或者一辆车子—>或者(|)
八、短路逻辑运算符
可以理解为:当左边的表达式能确定最终的结果,那么右边的就不会参与运算了
九、三元运算符(三元表达式)
格式:关系表达式 ? 表达式1 : 表达式2
package com.itheima.logiccoperator;
public class TernaryoperatorDemo1 {
public static void main(String[] args) {
int name1=10;
int name2=20;
int max = name1 > name2 ? name1 : name2;
System.out.println(max);
//整个三元运算符的结果必须要被使用
System.out.println(name1 > name2 ? name1 : name2);
}
}
练习:
代码:
package com.itheima.Test;
import java.util.Scanner;
public class Test4 {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
System.out.println("请输入第一只老虎的体重");
int weight1=sc.nextInt();
System.out.println("请输入第二只老虎的体重");
int weight2=sc.nextInt();
String result=weight1 == weight2 ? "相同":"不相同";
System.out.println(result);
}
}
运算符优先级
十、原码反码补码
在计算机计算时,使用的是补码进行计算,而由于补码是反码往后一位移动产生的,导致最后多出来了一个10000000,即-128,所以取值范围是-128~127.
1. 原码 :十进制数据的二进制表现形式,最左边是符号位,0为正,1为负
-
例如:56–>0 0111000
一个数字(0 / 1)有1比特,8比特 = 1字节 -
弊端:利用原码计算时,如果是正数没有任何问题,但是如果是负数计算,结果会和正确的运算方向相反。
2. 反码:为了解决原码不能计算负数的问题而出现的,正数的反码和补码都是其本身,负数的反码是符号位保持不变,其余位取反
- 弊端:运算时,如果结果不跨0,没有问题,如果跨了0,会跟实际结果有1的偏差,因为存在+0和-0。
3. 补码:为了解决负数计算时跨0的问题而出现的,正数的补码是其本身,负数的补码是在其反码的基础上+1
4. 基本数据类型
5. 其他的运算符
以上是在补码基础上进行计算的。