x = x&(x-1) 何解

龙卷雨击 2011-10-31 10:56:11
如题
...全文
2027 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
zkp216 2012-07-20
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]

实际就是看把十进制转换成二进制,里面有几个1;如x=9999; x=x&(x-1);则运算8次
[/Quote]

这个看的透彻
art747 2012-03-12
  • 打赏
  • 举报
回复
实际就是看把十进制转换成二进制,里面有几个1;如x=9999; x=x&(x-1);则运算8次
WellYi 2012-02-22
  • 打赏
  • 举报
回复
今天面试,遇到这题,结果打错了。额
cxyOOOO 2011-11-02
  • 打赏
  • 举报
回复
《Hackers Delight》
pathuang68 2011-11-02
  • 打赏
  • 举报
回复
x&(x-1)就是让最低位等于0,也就是说x&(x-1)的结果肯定是偶数。
龙卷雨击 2011-11-02
  • 打赏
  • 举报
回复
不好意思 忘记结贴了
hnyztzh 2011-11-01
  • 打赏
  • 举报
回复
x=x&(x-1); 可以用来求出x是否为2幂次方数;当&的结果为0时,x原值是2幂次方数,否则就不是2幂次方数;
如x=4时 4: 0000 0100
& 3:0000 0011
得出结果为0 ,是2幂次方数;
x=5时, 0000 0101
0000 0100
得出结果为1,即非2幂次方数;
mskmc_mc 2011-11-01
  • 打赏
  • 举报
回复
x=2&1;
x==0;

x=3&2;
x==2;

X=4&3;
x==0;

X=5&4;
x==4;

x=6&5;
x==4;

x=7&6;
x==6;

x=8&7;
x==0;

x=9&8;
x==8;

x=10&9;
x==8;

x=63&62;
x==62;

x=135&134;
x==134;

x=139&138;
x==138;

从规律上来看,应该是求偶数。
sp_daiyq 2011-11-01
  • 打赏
  • 举报
回复
这是用来判断一个数是否是2的N次幂,如果x = x&(x-1)的结果为0则说明x是2的N次幂,否则不是
hackbuteer1 2011-11-01
  • 打赏
  • 举报
回复
楼上正解。。。
支持英文数字 2011-11-01
  • 打赏
  • 举报
回复
从右向左数,找到第一个1,把1后面的所有的数字都变为0。如x=1000110,x&(x-1)=1000100就是把x右边的第一个1后面的数变为0(包括1)。如果10000的话,结果就是00000了。哈哈
七擒关羽 2011-10-31
  • 打赏
  • 举报
回复
x = x&(x-1)

a = x;
b = x-1;
x = a&b;

&操作,二进制运算,LS说的是特例,LZ还是需要懂&操作
無名小伙 2011-10-31
  • 打赏
  • 举报
回复
这种方法可以用来求一个十进制数 转换成二进制后有多少个1

int comput(int tmpn)
{
int tmpc=0;
while(tmpn>0)
{
tmpc++;
tmpn=tmpn&(tmpn-1)
}
return tmpc;
}


挺有用的位运算。
jixiang1983 2011-10-31
  • 打赏
  • 举报
回复
&是按位与, 就是x同(x-1)按位与,再把值赋给x。
关于&:
(A & B)
A=170 0000 0000 1010 1010
B=75 0000 0000 0100 1011
-------------------
C 0000 0000 0000 1010
A 、B、C为整数。 C的值:为10

lirunfa 2011-10-31
  • 打赏
  • 举报
回复
+++++ 位操作符

[Quote=引用 2 楼 ddlddy 的回复:]
位运算符,如果x等于8
就是二进制
x = 1000 & 111;
结果为0
[/Quote]
龙哥依旧 2011-10-31
  • 打赏
  • 举报
回复
位运算符,如果x等于8
就是二进制
x = 1000 & 111;
结果为0
failuer 2011-10-31
  • 打赏
  • 举报
回复
最右边为1的bit位消掉

65,210

社区成员

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

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