& 与运算逻辑 相同得相同 不同得0
^ 异或运算 相同为0 不同为1
打印整形 int 32位 二进制码
1<<31 1左移31位后
1 左移i位 那么第i位为 1
想知道 一个数的第i位为1或0 直接将这个数 和1左移i位 进行与操作
因为 &与操作 同为1的时候 才得1 其他的情况都为0 num的第i位 & 1 i位是1则得1 不是则是0
(左移没有带符号的)
任何数左移1位 结果都是 num * 2 的结果
public static void print(int num) {for (int i = 31; i >= 0; i--) {System.out.print((num & (1 << i)) == 0 ? "0" : "1");}System.out.println();}
最高位表示符号位
负数的表示 最高位是1 值为 剩下的位取反 再+1
一个数 想得到这个数的负数 也可以进行取反 +1操作 ~N+1 = -N
N不论是正负 都可以用 取反+1这套逻辑 得到相反数
int系统最小值 取反+1 是自己
系统最小值 符号位 是1 取反+1 又变回原样 。 取反可以带符号位 也可以不带符号位 不影响结果 

图灵机 就是找出一个原型 把不知道怎么算但知道怎么试的东西变成理论
比如求阶乘累加问题

public static long f2(int N) {long ans = 0;long cur = 1;for (int i = 1; i <= N; i++) {cur = cur * i;ans += cur;}return ans;}
