汕头cms建站模板,phpstudy如何搭建网站,天元建设集团有限公司经济活动分析,北京市网上服务平台/*
前置条件:无符号整数右移不产生1
调用函数是为了可以查看整个过程,不影响结果. 思路是让x在右移的过程中,把最高位之前的位全部填满. 填满后的结果右移一位(即x的最高位变为0,其他为1),再异或x得到最高位
以此类推知道覆盖到32位. */
#include stdio.h #inclu…
/*
前置条件:无符号整数右移不产生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(1x0x\t\t%32s\n,s); }
unsigned leftmost_one(unsigned x) { char a[32]; itoa(x,a,2); printf(a|x00x\t%32s\n,a); x|x1;//第一次往后复制1次最高位(填满了2位), itoa(x,a,2); printf(a|x10x\t%32s\n,a); x|x2;//第二次往后复制第一次的结果(填满了2*2位) itoa(x,a,2); printf(a|x20x\t%32s\n,a); x|x4;//第三次往后复制第二次的结果(填满了2*2*2位) itoa(x,a,2); printf(a|x40x\t%32s\n,a); x|x8; itoa(x,a,2); printf(a|x80x\t%32s\n,a); x|x16; itoa(x,a,2); printf(a|x160x\t%32s\n,a); return x^(x1); }