JavaSE(2)(简单了解idea, 项目结构,运算符,数据转换,原反补码)
p28 idea 项目结构
project 项目 > module 模块 > package 包 > class 类
拿微信举例, 微信就是项目, 它下方的四大功能(微信,通讯录,发现,我)就是模块, 一个项目是包含一个或多个模块的. 以第一个微信模块为例, 我们把相同功能的代码放在一个包中, 在包里面就是编写代码的类.
p29 idea设置
设置注释(comments)字体颜色 : Settings - Editor - Color Scheme - Language Defaults - Line comment
设置自动导包 : Settings - Editor - General - Auto Import - 勾选 Add... 和 Optimize...两个选项.
自动提示时忽略大小写 : Settings - Editor - General - Code completion - 去掉Match case的勾选
添加背景图片 : Settings - Appearance&Behavior - Appearance - UI Options - Background Image...
IDEA 的项目和模块的操作
添加模块 : File - Project Structure - Modules - + - New Modules
p30 运算符
+, - ,* : 和数学中功能一样, 在代码中, 如果有小数参与计算, 有可能不精确.
/ (除) : 1. 整数参与计算, 结果只能得到整数. 2 . 如果有小数参与计算, 有可能不精确.
%(取模) 的应用场景 :
- 来判断, A是否可以被B整除.
- 可以判断A是否为整数.
- 比如, 斗地主发牌, 3格玩家, 把每一张牌都定义一个序号. 拿序号%3, 如果结果为1, 就发给玩家1, 结果为2, 就发给玩家2, 结果为0, 就发给玩家3.
练习1 , 需求 : 键盘录入一个三位数, 将其拆分为个位, 十位, 百位后, 打印在控制台.
公式总结:
个位 : 数值 % 10
十位 : 数值 / 10 % 10
百位 : 数值 / 100 % 10
千位 : 数值 / 1000 % 10 ...
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入整数:");
int i = scanner.nextInt();
System.out.println("个位是"+i%10);//个位
System.out.println("十位是"+i/10%10);//十位
System.out.println("百位是"+i/100%10);//百位
}
p31 隐式转换和强制转换
取值范围从小到大: byte << short << int << long << float << double
隐式转换(自动类型提升) : 取值范围小的数 , 转换为, 取值范围大的数. 小 >> 大
- 取值范围小的, 和取值范围大的进行运算, 小的会先提升为大的, 再进行运算.
- byte , short , char 三种类型的数据在运算时, 都会直接先提升为 int , 然后再运算.
强制转换 : 取值范围大的数, 转换为, 取值范围小的数. 大 >>小
格式 : 目标数据类型 变量名 = (目标数据类型) 被强转的数据 ;
强制转换有可能出现错误.
double a = 1.1;
int b = (int)a;//double >> int
//-------------------
byte b1 = 10;
byte b2 = 20;
byte result (byte)(b1 + b2) ;//int >> byte
System.out.println(result) ;
p32 字符串和字符的加操作
当 "+" 操作中出现字符串时, 这个 "+" 就是字符串连接符, 会将前后数据拼接, 产生新字符串.
"123" + 123 >> "123123"
连续 "+"时, 从左到右逐个执行.有字符串参与就是拼接, 没有就是加法.
1 + 99 + "年" >> "100年"
1 + 2 + "abc" + 2 + 1 >> "3abc21"
字符相加
当字符 + 字符或 字符 + 数字 时, 会把字符通过ASCII码表查询到对应的数字再进行计算.
'a' = 97 'A' = 65 对应的数值
1 + 'a' >> 98 'a' + "abc" >> "aabc"
p33 自增 自减运算符
单独使用 : ++ 和-- 无论放在变量的前面还是后面, 单独一行结果是一样的.
参与运算 :
// 1. 后++ : 先用后加
int a = 10;
int b = a++; //先把10赋值给b
//结果 : a = 11 , b = 10 .
// 2. 前++ : 先加后用
int a = 10;
int b = ++a; //先自加,再把11赋值给b
//结果 : a = 11 , b = 11 .
p34 赋值运算符
符号 作用 说明
= 赋值 int a = 10
+= 加后赋值 a+=b,将a+b的值给a
-= 减后赋值 a-=b,将a-b的值给a
= 乘后赋值 a=b,将a*b的值给a
/= 除后赋值 a/=b,将a/b的商给a
%= 取余后赋值 a%=b,将a/b的余数给a
扩展的赋值运算符在底层都隐藏了一个强制类型转换.
关系运算符
关系运算符的结果都是boolean类型, 要么是true, 要么是false.
p 35 逻辑运算符
& - 逻辑与(且) 全是true ,才是true 两边都要满足
| - 逻辑或 全是false, 才是false, 只要有一个true 就为true 两边满足一个
应用场景 : 登录界面, 用户名和密码,必须都正确才能登陆成功.(&)
都要,就是 (&), 有一样就行,那是 (|)
^ - 逻辑异或 相同为false, 不同为true 比如结婚, 同性不能, 异性可以
! - 逻辑非 取反
p36 短路逻辑运算符
&& - 短路与 结果和 & 相同, 但有短路效果, 效率会比较高
|| - 短路或 结果和 | 相同, 但有短路效果, 效率会比较高
短路效果就是: 当左边的表达式能确定最终结果, 那么右边就不会参与运行了.
int a = 10;
int b = 10;
boolean result = ++a < 5 && ++b < 5;//左边已经是false了,右边就不运行了
System.out.println(result) ;
System.out.println(a) ;
System.out.println(b) ;//所以变量b就不再++了,结果是10
& , | - 无论左边是 true 还是 false , 右边都要执行.
&& , || - 如果左边能确定整个表达式的结果, 右边就不执行.
&& - 左边为false, 右边不执行.
|| - 左边为true, 右边不执行.
最常用的逻辑运算符 : && ,|| , !.
练习: 数字6
数字6 , 需求 : 录入两个整数, 如果其中一个为6, 最终结果输出true.
如果他们的和为6的倍数,最终结果输出true.其它情况都是false.
import java.util.Scanner;
/*
练习3 数字6 , 需求 : 录入两个整数, 如果其中一个为6, 最终结果输出true.
如果他们的和为6的倍数,最终结果输出true.其它情况都是false.
*/
public class helloWorld {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入第一个数:");
int n1 = scanner.nextInt();
System.out.println("输入第二个数:");
int n2 = scanner.nextInt();
//三个条件只要满足一个就行, n1 == 6, n2 == 6, (n1 + n2) % 6 == 0 ,把它们用||连接
boolean n6 = n1 == 6 || n2 == 6 || (n1 + n2) % 6 == 0 ;
System.out.println(n6);
}
}
p37 三元运算符
格式 : 关系表达式 ? 表达式1 : 表达式2 ;
关系表达式为true, 表达式1的值就是结果, 如果关系表达式为false, 表达式2的值就是结果
整个三元运算符的结果必须被使用
练习: (用三元运算符做判断) 需求 : 分别录入两人体重, 实现判断两人体重是否相同,结果输出 相 同或不同.
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("第一个人的体重:");
int weight1 = s.nextInt();
System.out.println("第二个人的体重:");
int weight2 = s.nextInt();
String result = weight1 == weight2 ? "体重相同" : "体重不同";
System.out.println(result);
}
练习: (用三元运算符做判断) 需求 : 获取三个数的最大值.
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("第一个数");
int n1 = sc.nextInt();
System.out.println("第二个数");
int n2 = sc.nextInt();
System.out.println("第三个数");
int n3 = sc.nextInt();
int temp = n1 > n2 ? n1 : n2;//n1,n2比较 ,大的赋值给temp
int max = temp > n3 ? temp : n3;//temp,n3比较, 大的赋值给max
System.out.println("最大的数是:" + max);
}
ctrl + alt + L 格式化代码
运算符的优先级
小括号优先于所有, 你想要让谁优先计算就用小括号把它括起来
p38 原码,反码,补码
原码
十进制数据的二进制表现形式, 最左边是符号位, 0为正, 1为负
原码的弊端
利用原码进行计算时, 如果是正数完全没问题.
但是如果是负数计算, 结果就出错, 实际运算方向, 跟正确的运算方向是相反的.
反码出现的目的
为了解决原码不能计算负数的问题而出现的。
反码的计算规则
正数的反码不变,负数的反码在原码的基础上,符号位不变。数值取反,0变1, 1变0。
反码的弊端
负数运算的时候,如果结果不跨0,是没有任何问题的,但是如果结果跨0,跟实际结果会有1的偏差。
补码出现的目的
为了解决负数计算时跨0的问题而出现的。
补码的计算规则
正数的补码不变,负数的补码在反码的基础上+1。
另外补码还能多记录一个特殊的值-128,该数据在1个字节下,没有原码和反码。
补码的注意点
计算机中的存储和计算都是以补码的形式进行的。
& - 逻辑与 : 两个数字的二进制形式比较, 都是1就为1,(同上)
| - 逻辑或 : 两个数字的二进制形式比较, 有一个1就为1,
<< - 左移 : 向左移动, 低位补0 , 左移一位就相当于*2.
(>>) - 右移 : 向右移动, 高位正数补0, 负数补1, 右移一位就相当于/2.
(>>>) - 无符号右移 : 向右移动, 高位补0.
标签:10,int,补码,idea,System,运算符,println,out From: https://www.cnblogs.com/lg369/p/17654309.html