目标开发一款自己喜欢且能最大限度让用户参与建设的社交软件。
笔记:
原码;反码;补码(重点、难点,必背)
1、二进制的最高位是符号位:0表示正数,1表示负数
2、正数的原码、反码、补码都是一样的
3、负数的反码=它的原码符号位不变,其他位取反
4、负数的补码=它的反码+1.负数的反码 = 负数的补码 - 1
5、0的反码、补码都是0
6、java没有无符号数,换言之,java中的数都是有符号的
7、在计算机运算的时候,都是以补码的方式来运算的
8、当我们看运算结果的时候,要看他的原码
位运算符:
java 中有7个位运算(& 、| 、^ 、~ 、>>、<<、和>>>)
按位与& :两位全为1,结果为1.否则为0
按位或|:两位有一个为1.结果为1,否则为0
按位异或^:两位一个为0,一个为1,结果为1,否则为0
按位取反~ :0转换成1,1转换成0
练习:2&3 = ~-2 = 2|3 = 2^3 =
public class BitOperator {
public static void main (String [] args) {
System.out.println(2 & 3);
System.out.println(~ -2);
System.out.println(2 | 3);
System.out.println(2 ^ 3);
}
}
【先得到原码、在转换成反码、最后是补码;通过位运算后得出的补码,倒推反码原码,最后变成十进制】
1、算术右移 >> :低位溢出,符号位不变,并用符号位补溢出的高位【本质是原数除以几次2(移几次就除以几次))】
2、算术左移<<:符号位不变,低位补0【本质是原数乘以几次2(移几位就乘以几次)】
3、>>>逻辑右移也叫无符号右移,运算规则是:低位溢出,高位补0
4、特别说明:没有<<<符号
作业:
10 / 3 = 3 10 / 5 = 2 10 % 2 = 0 -10.5 % 3 = -3.5 正确答案是-1.5 (a % b 当a是小数时,公式= a - (int)a / b * b 注意:有小数运算,得到结果是近似值)
试着写出String转换成Double类型的语句,以及将char类型转换成String的语句,距离说明即可
String str = "28";
double d = Double.parseDouble(d);
char c = "刘";
String str = c +" ";
控制结构
在程序中,程序运行的流程控制决定程序是如何执行的,是我们必须掌握的,主要有散发流程控制语句:顺序控制、分支控制、循环控制
顺序控制,程序从上到下逐行地执行,中间没有任何判断和跳转。java中定义变量时采用合法的向前应用。
分支控制 if-else 单分支基本语法:if (条件表达式){
执行代码块,可以有多条语句
}
import java.util.Scanner;
public class If01{
public static void main (String [] args) {
Scanner myscanner = new Scanner(System.in);
System.out.println("请输入年龄");
int age = myscanner.nextInt();
if(age > 18) {
System.out.println("要对自己负责");
}
System.out.println("程序继续…");
}
}
双分支基本语法:if (条件表达式){
执行代码块1,可以有多条语句
}
else {
执行代码块2
}
练习:
public class If02{
public static void main (String [] args) {
double a = 11;
double b = 17;
if(a > 10 && b < 20) {
System.out.println("a + b ="+ (a + b));
}
System.out.println("程序继续…");
int m = 7;
int n = 8;
int s = m + n;
if(s % 3 == 0 && s % 5 ==0) {
System.out.println("和可以被3又能被5整除");
} else {
System.out.println("和不能被3以及5整除");
}
}
}
多分支基本语法:if (条件表达式){
执行代码块1,可以有多条语句
}
else if {
执行代码块2
}
……
else {
执行代码块n
}
多分支可以没有else,如果所有的条件表达式都不成立,则一个执行入口都没有;如果有else,如果所有的条件表达式都不成立,则默认执行else代码块。
练习题:
import java.util.Scanner;
public class If03 {
public static void main (String [] args) {
Scanner myscanner = new Scanner(System.in);
System.out.println("请输入信用分(1-100)");
int grade = myscanner.nextInt();
if(grade >=1 && grade <=100) {
if(grade == 100) {
System.out.println("信用极好");
} else if (grade > 80 && grade <=99) {
System.out.println("信用优秀");
} else if (grade >= 60 && grade <=80) {
System.out.println("信用一般");
} else {
System.out.println("信用不及格");
}
} else{
System.out.println("信用分需要在1-100,请重新输入:)");
}
}
}
练习:
boolean b = true;
if(b == false) { //如果 b = false 又会输出什么
System.out.println("a");
} else if (b) {
System.out.println("b");
} else if (!b) {
System.out.println("c");
} else {
System.out.println("d");
}
嵌套分支:在一个分支结构中又完整的嵌套了另一完整的分支结构,里面的分支的结构称为内层分支外面的分支结构称为外层分支。规范或者建议:不要超过3层,可读性不好
练习:
import java.util.Scanner;
public class NestedIf {
public static void main (String [] args) {
Scanner myscanner = new Scanner(System.in);
System.out.println("请输入歌手分数");
double score = myscanner.nextDouble();
if(score > 8.0) {
System.out.println("请输入性别");
char gender = myscanner.next().charAt(0);
if (gender == '男') {
System.out.println("进入男子组");
} else if (gender == '女') {
System.out.println("进入女子组");
} else {
System.out.println("您输入的性别有误,请重新输入");
}
} else{
System.out.println("Sorry");
}
}
}
练习:根据淡旺季的月份和年龄,打印票价
import java.util.Scanner;
public class HomeworkNestedIf {
public static void main (String [] args) {
Scanner myscanner = new Scanner(System.in);
System.out.println("请输入月份");
int mon = myscanner.nextInt();
if(mon >= 4 && mon <=10) {
System.out.println("请输入年龄");
int age = myscanner.nextInt();
if (age < 18) {
System.out.println("半价");
} else if (age >= 18 && age <= 60 ) {
System.out.println("60");
} else {
System.out.println("1/3");
}
} else{
System.out.println("请输入年龄");
int age = myscanner.nextInt();
if (age >= 18 && age <= 60 ) {
System.out.println("40");
} else {
System.out.println("20");
}
}
}
}