[问题] x+=x&-x 是什么意思?

楼主: zxcv14011 (Bessiozs)   2018-04-28 11:00:44
最近看到程式码
有人这样写
for(;x>=0; x+=x&-x)
但不太了解后面的 x+=x&-x是什么意思
试着写了
for(;x>=0; x+=x&-x)
{
cout<<x<<endl;
}
跑的结果都是从 x开始 然后变成2的指数
所以想问 x+=x&-x是要怎样解读?
另外想问一下
int a[1<<10]
这样跟 a[10000000000]是一样的吗?
作者: steve1012 (steve)   2018-04-28 11:32:00
不要这样写
作者: alan23273850   2018-04-28 11:43:00
最后那个当然不对,二进制不是十进制
作者: cutekid (可爱小孩子)   2018-04-28 11:49:00
x+=x&-x ←等于加上 x 最右边 bit 的那个值唷有点“线段树”的味道~~int a[1 << 10] ← int a[1024] 的意思唷, 2^10 = 1024
作者: djshen (djshen)   2018-04-28 11:57:00
BIT吧
作者: cphe (魔鬼藏在垃圾筒里)   2018-04-28 12:17:00
你把1~8的 x&-x 用bit表示就知道为什么了这种写法其实不用去钻研,除非你很常用,不然一周后你就忘了再来就是别人也不好读
作者: oToToT (屁孩)   2018-04-28 20:20:00
他在写binary index tree(fenwick tree)吧
作者: xavier13540 (柊 四千)   2018-04-29 03:09:00
前面那格应该是x<=n吧 另外其实我也常常这样写@@
作者: y3k (激流を制するは静水)   2018-04-30 09:01:00
这种写法还是有其必要性吧?而且其实蛮基本的...
作者: uranusjr (←這人是超級笨蛋)   2018-04-30 18:41:00
基本与否是一回事, 哪里有必要性?没有这种语法的语言多得是, 难道这些语言都有根本缺陷做不了正事吗?
作者: xavier13540 (柊 四千)   2018-04-30 22:02:00
是没有必要性 但这样写精简很多 可读性也不差
作者: iamstudent (stu)   2018-05-01 11:44:00
不要看太少又不想动脑就骂别人可读性低bitwise operator在driver应用上非常常见而且很多时候往往都是效率上的需求,会具有必要性没有这类语法的语言,应该不会有人想用在driver上有兴趣专研bitwise op的人,推荐去看Hacker's Delight
作者: Lee1027 (遇到吠狗真衰)   2018-05-08 02:10:00
感谢分享

Links booklink

Contact Us: admin [ a t ] ucptt.com