第五题
题目
如果采用代码中的测试数据,应该输出:
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);