补充知识:1)正整数的补码与原码相同;
2)求负整数的补码:原码 符号位不变,数值位各位取反,最后整个数加1得到补码;
3)按位与&的结果是补码与补码运算得到的结果。
进制转换:1)十进制整数----->二进制(除2取余倒排)
2)二进制--->十进制(按权重相乘相加)
3)十六进制 <------>二进制(1位对应4位)
1. int x; x按位表示有多少位1?
编程中常会用到位编程,若要数出一个数x中有多少位1,可用如下算法:
int func(int x){ int count = 0; while(x){ count++; x = x&(x-1); } return count; }
x & (x-1)得到的是消去x最低位的1后的数。
2. int x; x中最右边的位1的表示数是多少?
x & (-x);//得到x最右边位1的表示数
x & (-x)得到的是x最低位是1的表示数。
(N-Queens就用到这种技巧)
时间: 2024-10-03 19:00:27