【进制转换】(2016)第七届蓝桥杯省赛 C/C++ A组 题解(第五题)

时间:2021-12-28 12:38:38

第五题 

题目

     如果采用代码中的测试数据,应该输出:

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);