您的位置:首页 > 理论基础

Generate mask indicating leftmost 1 in x.

2013-10-15 00:00 1631 查看
摘要: For example 0xFF00 -> 0x8000,and 0x6600 -> 0x4000.If x = 0 ,then return 0.
int leftmost_one(unsigned x);
函数应该遵循位级编码规则,不过代可以假设数据类型int 有w = 32位。
你的代码最多只能包含15个算术运算、位运算和逻辑运算.
来自<深入理解计算机系统>第二章 66

代码如下:

int leftmost_one(unsigned x){
x = x | (x >> 1);
x = x | (x >>2);
x = x | (x >>4);
x = x | (x >> 8);
x = x | (x >> 16);
printf("%x\n",x);
return x ^(x >> 1);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息