原码反码补码&循环&递归复习

来源:互联网 发布:大学室友不好知乎 编辑:程序博客网 时间:2024/06/10 23:07

一.原码反码补码

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;            }        }    }
0 0
原创粉丝点击