1.题目:
如下一段神奇的代码实现的功能是什么?
int miracle(unsigned int n)
{
int m= n==0 ? 0:1;
while (n=(n&(n-1)))
{
m++;
}
return m;
}
答案:
n的二进制表示中“1”的个数
解析:
此题的理解核心是 n&(n-1),例如:
n = 10100(二进制),则(n-1) = 10011 ; n&(n-1) = 10000
n&(n-1)表示将n中最右的一个1变成0.。
while (n=(n&(n-1))) 代表当1都变成 0之后,循环结束
2.题目:
请阅读以下程序:
void main()
{
int a=5,b=0,c=0;
if (a=b+c) printf ("***\n");
else printf("$$$\n");
}
答案:输出$$$
解析:先将b+c的值赋给a
3.题目:
程序出错在什么阶段__?
int main(void) {
http://www.taobao.com
cout << "welcome to taobao" << endl;
}
答案:程序运行正常
解析:
双斜杠之后的www.taobao.com被当做注释了,那么前面的http:是否合法?这就是C++中一个几乎不会被用到的语法,标签。