一个函数问题

wcycxp 2013-03-14 01:44:59
unsigned int f(unsigned int x)
{
unsigned int x=x-1;
x=x|(x>>1);
x=x|(x>>2);
x=x|(x>>4);
x=x|(x>>8);
x=x|(x>>16);
x=x+1;
}

这个函数是什么功能啊?本人新手对位运算不太了解
...全文
93 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wcycxp 2013-03-14
  • 打赏
  • 举报
回复
谢谢大家,我到时候回去了用数据测试下看看
starytx 2013-03-14
  • 打赏
  • 举报
回复
引用 4 楼 rilnitx 的回复:
位运算: | 相当于 加法, >>相当于除法
|是按位或, UINT a = 15; cout << (a|3) << endl; //你认为输出18吗?>>是右移操作,相当于除法,右移几位相当于除以2的几次方。
引用 楼主 wcycxp 的回复:
unsigned int f(unsigned int x) { unsigned int x=x-1; x=x|(x>>1); x=x|(x>>2); x=x|(x>>4); x=x|(x>>8); x=x|(x>>16); x=x+1; } 这个函数是什么功能啊?本人新手对位运算不太了解
如果是下边的代码的话,那就是在特定的区间内,返回2的n次方数,测试结果如下: 1-1 2 2-2 4 3-4 8 5-8 16 9-16 32 17-32 64 33-64 128 65-128 256 129-256 512
图灵狗 2013-03-14
  • 打赏
  • 举报
回复
正确的代码应该是这样的:

unsigned int f(unsigned int x)
{
   x=x-1;
   x=x|(x>>1);
   x=x|(x>>2);
   x=x|(x>>4);
   x=x|(x>>8);
   x=x|(x>>16);
   x=x+1;
   return x;
}
f函数的功能是返回x往上最接近的2的n次幂,例如: 0x5 --> 向上的2的n次幂就是0x8 0x2c --> 向上的2的n次幂就是0x40 0x97 --> 向上的2的n次幂就是0x100
引用 楼主 wcycxp 的回复:
unsigned int f(unsigned int x) { unsigned int x=x-1; x=x|(x>>1); x=x|(x>>2); x=x|(x>>4); x=x|(x>>8); x=x|(x>>16); x=x+1; } 这个函数是什么功能啊?本人新手对位运算不太了解 ……
rilnitx 2013-03-14
  • 打赏
  • 举报
回复
位运算: | 相当于 加法, >>相当于除法
rocktyt 2013-03-14
  • 打赏
  • 举报
回复
如1楼所说,参数名打错了 这段代码大概是想获取一个数字的二进制位数
wcycxp 2013-03-14
  • 打赏
  • 举报
回复
可能我记错了,形参是别的呢?
xyqgcs 2013-03-14
  • 打赏
  • 举报
回复
你写的这段代码 unsigned int x=x-1;和unsigned int f(unsigned int x) 一个参数x定义了两次,根本无法编译通过的。

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧