首先放上代码:
int lowbit(int x){
return x&(-x)
}
这里用的知识有两点:与运算,pc存储是以补码的形式来存储数的。
补码:
----负数的补码是原码按位取反加一(符号位不变),正数的原码和补码是一样的。
----eg(假设是八位存储):-8的原码是10001000,反码是11110111,补码是11111000
lowbit(8)
----00001000&11111000=00001000=8
----注:此处只有8和-8是十进制数,其余数为二进制
lowbit的用处(暂时只发现下面的作用):
----如果一个数除了1之外没有其他奇数因子那么它进行lowbit()运算的值就等于它本身。
lowbit(x)求解的值:
----lowbit(x)计算的结果是2^k,其中k为x在二进制表示下末尾0的个数