第五题
题目
如果采用代码中的测试数据,应该输出:
00000000000000000000000001100111 00000000000000000000000001100000
00000000000000000000000000001100 00000000000000000000000000001100
请仔细阅读程序,填写划线部分缺少的代码。
注意:只填写缺少的内容,不要书写任何题面已有代码或说明性文字。
#include <stdio.h>
void f(int x)
{
int i;
for(i=0; i<32; i++) printf("%d", (x>>(31-i))&1);
printf(" ");
x = _______________________;
for(i=0; i<32; i++) printf("%d", (x>>(31-i))&1);
printf("\n");
}
int main()
{
f(103);
f(12);
return 0;
}
思路分析
采取加一的方法去掉尾部的连续1;
拿103来举例子:
00000000000000000000000001100111
00000000000000000000000001101000
后面标记意味着全部得变为0;
怎么变?这里采取&符号即可解决。
所以所填代码为:
x=x&(x+1);
00000000000000000000000001100111
00000000000000000000000001101000
后面标记意味着全部得变为0;
怎么变?这里采取&符号即可解决。
所以所填代码为:
x=x&(x+1);