一.原码反码补码
1.正数反码,补码是本身
- 例:int a = 10; //0000 0000 0000 0000 0000 0000 0000 1010
2.负数反码和原码,补码的关系
- 例:int b = -10;
//1000 0000 0000 0000 0000 0000 0000 1010 原码
//1111 1111 1111 1111 1111 1111 1111 0101 反码
反码 → 补码:+1
//1111 1111 1111 1111 1111 1111 1111 0110 补码
3.位运算符 & | ^ ~ 运算的是补码
例:int result1 = a & b; // a = 10 b = -10
&按位与:都为1结果为1,否则为0
//0000 0000 0000 0000 0000 0000 0000 1010 10补码
//1111 1111 1111 1111 1111 1111 1111 0110 -10 补码
//result1
//0000 0000 0000 0000 0000 0000 0000 0010 补码
运算后补码符号位(第一位)为0,则补码为原码
System.out.println(result1);
输出结果为:2
例:int result2 = c & b; // c = -7 b = -10
//1000 0000 0000 0000 0000 0000 0000 0111 原码
//1111 1111 1111 1111 1111 1111 1111 1000 反码
//1111 1111 1111 1111 1111 1111 1111 1001 -7(c)补码
//1000 0000 0000 0000 0000 0000 0000 1010
//1111 1111 1111 1111 1111 1111 1111 0101
//1111 1111 1111 1111 1111 1111 1111 0110 -10(b)补码
//result2
//1111 1111 1111 1111 1111 1111 1111 0000补码
补码 → 反码:-1
//1111 1111 1111 1111 1111 1111 1110 1111反码
//1000 0000 0000 0000 0000 0000 0001 0000原码
System.out.println(result2)
输出结果为:-16| 按位或:有1结果为1,否则为0
^ 按位抑或:相同结果为1,不同为0
~ 取反
二.循环
循环三要素:1.循环变量赋初值 2.循环条件合理 3.循环变量要改变
1.While & Do-while
- while 语句格式:while (bool表达式) {循环体;}
Do-while 语句格式:do {循环体} while (bool表达式);
两者区别:Do-while总是保证循环会被至少执行一次。
2.For循环
for循环语句是支持迭代的一种通用结构,是最有效最灵活的循环结构
语法形式:for (初始表达式 ①; 布尔表达式 ②; 更新表达式③) {循环体④}
循环顺序:① ②④③ ②④③ ②④③ …
例:打印空心菱形◇public class Test{ public static void main(String[] args){ for(int i = 1;i <= 13;i++){ for(int j = 1;j <= 13;j++){ if(i + j == 8 || i + 6 == j || i - 6 == j || i + j == 20){ System.out.print("*"); }else{ System.out.print(" "); } } System.out.println(); } } }
三.递归
递归的基本思想:自己调用自己
递归结构包括两个部分:
1.定义递归头。解答:什么时候不调用自身方法。(如果没有头,将陷入死循环)
2.递归体。解答:什么时候需要调用自身方法。例1:斐波拉契数列(1 1 2 3 5 8 13…)
public int getFnum(int n) {
if (n == 1 || n == 2) {
return 1;
} else {
return getFnum(n - 1) + getFnum(n - 2);
}
}
- 例2:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一
半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
public class Monkey {
public static void main(String[] args) {
int day = 10;
System.out.println(myMonkey(day));
}
public static int myMonkey(int day){
if(day == 1){
return 1;
}else{
return (myMonkey(day - 1) + 1) * 2;
}
}
}