1.遇到实在不会的题可以考虑打表找规律。
2.如果遇到疑似段错误(数组越界,野指针,堆栈溢出)的情况,可以使用exit()函数分割程序寻找错误点。
3.用计算机储存整数的方法找到某个数x的二进制表示的最低的1的的位置lowbit函数。
代码1:
int lowbit(int x)
{
return x&(-x);
}
原理:
负数一般用补码表示从而进行运算,补码的朴素求法就是对各位取反再加1,但在计算机组成原理中介绍了一种更高明的求负数补码做法:以最低位的1为基准(该位保持不变),左侧全部取反,右侧的0保持不变,所以and一下就可以只留下最低位1和所有后面的0表示的10进制数了,举个例子:14(1110)-14(0010)and后留下2(0010)。
代码2:
int lowbit(int x)
{
return x-(x&(x-1));
}
原理:
x&(x-1)用于消去最低位的1,然后x-x&(x-1)就相当于把最低位1右边的所有数全部减掉了,只留下最低位1和所有后边的0表示的十进制数了。