& 与运算逻辑 相同得相同 不同得0
    ^ 异或运算 相同为0 不同为1
    打印整形 int 32位 二进制码
    image.png
    1<<31 1左移31位后
    image.png
    1 左移i位 那么第i位为 1
    想知道 一个数的第i位为1或0 直接将这个数 和1左移i位 进行与操作
    因为 &与操作 同为1的时候 才得1 其他的情况都为0 num的第i位 & 1 i位是1则得1 不是则是0
    (左移没有带符号的)
    任何数左移1位 结果都是 num * 2 的结果

    1. public static void print(int num) {
    2. for (int i = 31; i >= 0; i--) {
    3. System.out.print((num & (1 << i)) == 0 ? "0" : "1");
    4. }
    5. System.out.println();
    6. }

    最高位表示符号位
    image.png
    负数的表示 最高位是1 值为 剩下的位取反 再+1
    image.png
    一个数 想得到这个数的负数 也可以进行取反 +1操作 ~N+1 = -N
    N不论是正负 都可以用 取反+1这套逻辑 得到相反数
    image.png
    int系统最小值 取反+1 是自己
    image.png
    系统最小值 符号位 是1 取反+1 又变回原样 。 取反可以带符号位 也可以不带符号位 不影响结果
    image.png

    image.png
    图灵机 就是找出一个原型 把不知道怎么算但知道怎么试的东西变成理论

    比如求阶乘累加问题

    image.png

    1. public static long f2(int N) {
    2. long ans = 0;
    3. long cur = 1;
    4. for (int i = 1; i <= N; i++) {
    5. cur = cur * i;
    6. ans += cur;
    7. }
    8. return ans;
    9. }