这个函数怎么快速知道结果

delectation 2008-10-10 04:42:09
static int test()
{
int x = 9999;
int count=0;
while (Convert.ToBoolean(x))
{
count++;
x=x&(x-1);
Console.WriteLine(x);

}
return count;
}


怎么理解这个函数。
...全文
110 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eagle_ice 2008-10-12
  • 打赏
  • 举报
回复
一楼了 想通了 就结帖撒....
zcs302 2008-10-12
  • 打赏
  • 举报
回复
想通了
dlmeijianyu 2008-10-10
  • 打赏
  • 举报
回复
一楼的是正确的.
ChargeForward 2008-10-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cpio 的回复:]
用来求一个整数的二进制表示时,有多少个1
[/Quote]
正解!
止戈而立 2008-10-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 Jack_xiao 的回复:]
返回值count是8
9,9,9,9
1001,1001,1001,1001
9,9,9,8 =>返回值是7
1001,1001,1001,1000 =>7个1
9,9,9,7 =>返回值是7
1001,1001,1001,0111 =>9个1

一楼说的似乎不大对
[/Quote]

你的x变量是十进制的,并非十六进制,怎么可以转成这呢?
9999的二进制是:
0010011100001111

8个1
Jack_xiao 2008-10-10
  • 打赏
  • 举报
回复
这个函数似乎是一个衰变,返回值就是某个数按照这个衰变变为0的步数
Jack_xiao 2008-10-10
  • 打赏
  • 举报
回复
返回值count是8
9,9,9,9
1001,1001,1001,1001
9,9,9,8 =>返回值是7
1001,1001,1001,1000 =>7个1
9,9,9,7 =>返回值是7
1001,1001,1001,0111 =>9个1

一楼说的似乎不大对
Jack_xiao 2008-10-10
  • 打赏
  • 举报
回复
运行一下:
9998
9996
9992
9984
9728
9216
8192
0
cpio 2008-10-10
  • 打赏
  • 举报
回复
(Convert.ToBoolean(x))
判断是否含有1,如果有的话,肯定为真,count加1

x = x & (x - 1);去掉它的一个1

如果x最后一位是1,很明显,去掉了一个1

****1,减1的话,变成****0,再与一下,结果还是****0,少了最后的1

如果最后一位不是1

****0,减1之后,再与一下,最后一位肯定也是0,由于最后一位是0,减一之后肯定影响前面的,前面的也会少一个1

这样到最后没有1的时候就结束了,返回1的个数
cpio 2008-10-10
  • 打赏
  • 举报
回复
用来求一个整数的二进制表示时,有多少个1

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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