深入理解计算机系统 家庭作业 2.66

/*

前置条件:无符号整数右移不产生1

调用函数是为了可以查看整个过程,不影响结果.
思路是让x在右移的过程中,把最高位之前的位全部填满.
填满后的结果右移一位(即x的最高位变为0,其他为1),再异或x得到最高位
 

以此类推知道覆盖到32位.
*/

#include <stdio.h>
#include <stdlib.h>

unsigned leftmost_one(unsigned x);

int main(void)
{
    char s[32];
    unsigned x =0x10100000;
    itoa(x,s,2);
    itoa(leftmost_one(x),s,2);
    printf("1x=0x\t\t%32s\n",s);


}

unsigned leftmost_one(unsigned x)
{
    char a[32];
    itoa(x,a,2);
    printf("a|=x>>0=0x\t%32s\n",a);
    x|=x>>1;//第一次往后复制1次最高位(填满了2位),

    itoa(x,a,2);
    printf("a|=x>>1=0x\t%32s\n",a);
    x|=x>>2;//第二次往后复制第一次的结果(填满了2*2位)

    itoa(x,a,2);
    printf("a|=x>>2=0x\t%32s\n",a);
    x|=x>>4;//第三次往后复制第二次的结果(填满了2*2*2位)
    itoa(x,a,2);
    printf("a|=x>>4=0x\t%32s\n",a);
    x|=x>>8;
    itoa(x,a,2);
    printf("a|=x>>8=0x\t%32s\n",a);
    x|=x>>16;
    itoa(x,a,2);
    printf("a|=x>>16=0x\t%32s\n",a);
    return x^(x>>1);
}

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-04 16:28:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-04 16:28:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-04 16:28:01       82 阅读
  4. Python语言-面向对象

    2024-04-04 16:28:01       91 阅读

热门阅读

  1. CSC博士联培申请时间线

    2024-04-04 16:28:01       36 阅读
  2. 浅谈HTTP

    2024-04-04 16:28:01       30 阅读
  3. Leetcode204.计数质数

    2024-04-04 16:28:01       38 阅读
  4. pytorch读写文件

    2024-04-04 16:28:01       34 阅读
  5. Composer常见错误及解决方法

    2024-04-04 16:28:01       41 阅读