zoukankan      html  css  js  c++  java
  • 2016年蓝桥杯省赛C++A组 消除尾一

    消除尾一:

    下面的代码把一个整数的二进制表示的最右边的连续的1全部变成0
    如果最后一位是0,则原数字保持不变。

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

    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("
    ");    
    }
    
    int main()
    {
    f(103);
    f(12);
    return 0;
    }

    注意:只填写缺少的内容,不要书写任何题面已有代码或说明性文字。

    正确答案: x&(x+1)

    详解:

    1.  x>>(31-i))&1  :表示x移位后二进制数与1的二进制代码与操作,比如x=10(0000 0000 0000 1010),x>>1=(0000 0000 0000 0101),然后与1(0000 0000 0000 0001)进行“与”操作,得出0000 0000 0000 0000,这便表示x的倒数第二位的数字。(看不懂的,先百度移位操作)

    2. x&(x+1)  :题中要求把二进制最后的连续的1变为0,对于0则不做变化。比如x=247(0000 0000 1111 0111),x+1=248(0000 0000 1111 1000),所以你末尾不管有多少连续的1,加1必须全部变为0,与原来进行“与”操作以后,只要变换的地方全部都是 0,没变的地方还是原来的样子,所以就满足了题意。

  • 相关阅读:
    setHapticFeedbackEnabled在androi的作用
    Android 跑马灯
    jQuery中绑定事件的命名空间详解
    可见即所得的CSS编辑设计
    盘点8种CSS实现垂直居中水平居中的绝对定位居中技术
    用到的知识点
    用PS去除图片中文字的6个方法
    html页面头部里的meta
    px pt em对应关系
    phpMyAdmin安装与配置(涉及LAMP配置)
  • 原文地址:https://www.cnblogs.com/handsometaoa/p/11963921.html
Copyright © 2011-2022 走看看