作者zxcv14011 (Bessiozs)
看板C_and_CPP
标题[问题] x+=x&-x 是什麽意思?
时间Sat Apr 28 11:00:44 2018
最近看到程式码
有人这样写
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]是一样的吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.113.91.107
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1524884446.A.E1E.html
1F:推 steve1012: 不要这样写 04/28 11:32
2F:推 alan23273850: 最後那个当然不对,二进位不是十进位 04/28 11:43
3F:推 cutekid: x+=x&-x ←等於加上 x 最右边 bit 的那个值唷 04/28 11:49
4F:→ cutekid: 有点「线段树」的味道~~ 04/28 11:49
5F:→ cutekid: int a[1 << 10] ← int a[1024] 的意思唷, 2^10 = 1024 04/28 11:50
了解,以为1<<10 是指往左边移动10个位置,谢谢您的解释
6F:→ djshen: BIT吧 04/28 11:57
7F:推 cphe: 你把1~8的 x&-x 用bit表示就知道为什麽了 04/28 12:17
8F:→ cphe: 这种写法其实不用去钻研,除非你很常用,不然一周後你就忘了 04/28 12:18
9F:→ cphe: 再来就是别人也不好读 04/28 12:18
※ 编辑: zxcv14011 (140.113.91.107), 04/28/2018 18:53:16
10F:推 oToToT: 他在写binary index tree(fenwick tree)吧 04/28 20:20
11F:推 xavier13540: 前面那格应该是x<=n吧 另外其实我也常常这样写@@ 04/29 03:09
12F:→ y3k: 这种写法还是有其必要性吧?而且其实蛮基本的... 04/30 09:01
13F:→ uranusjr: 基本与否是一回事, 哪里有必要性?没有这种语法的语言多 04/30 18:41
14F:→ uranusjr: 得是, 难道这些语言都有根本缺陷做不了正事吗? 04/30 18:41
15F:推 xavier13540: 是没有必要性 但这样写精简很多 可读性也不差 04/30 22:02
16F:推 iamstudent: 不要看太少又不想动脑就骂别人可读性低 05/01 11:44
17F:→ iamstudent: bitwise operator在driver应用上非常常见 05/01 11:45
18F:→ iamstudent: 而且很多时候往往都是效率上的需求,会具有必要性 05/01 11:46
19F:→ iamstudent: 没有这类语法的语言,应该不会有人想用在driver上 05/01 11:47
20F:→ iamstudent: 有兴趣专研bitwise op的人,推荐去看Hacker's Delight 05/01 11:48
21F:推 Lee1027: 感谢分享 05/08 02:10