一道题目 移位

csdn上一道面试题: 十进制整数,计算对应的二进制数包含多少个1,用位操作。
***************************** 

int n = 95625;
int m = 1;
int num = 0;
for (int i = 0;i < sizeof(int)*8;i++) {
int temp = n & m;
m = m << 1;
if (temp != 0) {
num++;
}
}
cout << num << endl;

*****************************  
让1不断移位去判断与其对应位置是否为1 
若是有符号整数 负数 原码的补码(即原码的反码加1) 
假如n是-1那么其对应二进制有32个1 
*****************************  
如果操作数为负数,则位操作符如何处理其操作数的符
号位依赖于机器。
对于位操作符,由于系统不能确保如何处理其操作数的
符号位,所以强烈建议使用unsigned整型操作数。
*****************************   

write by fgd

posted @ 2012-03-15 15:46  wen_dao_  阅读(133)  评论(0编辑  收藏  举报