看板 C_and_CPP 關於我們 聯絡資訊
最近看到程式碼 有人這樣寫 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://www.ptt.cc/bbs/C_and_CPP/M.1524884446.A.E1E.html
steve1012: 不要這樣寫 04/28 11:32
alan23273850: 最後那個當然不對,二進位不是十進位 04/28 11:43
cutekid: x+=x&-x ←等於加上 x 最右邊 bit 的那個值唷 04/28 11:49
cutekid: 有點「線段樹」的味道~~ 04/28 11:49
cutekid: int a[1 << 10] ← int a[1024] 的意思唷, 2^10 = 1024 04/28 11:50
了解,以為1<<10 是指往左邊移動10個位置,謝謝您的解釋
djshen: BIT吧 04/28 11:57
cphe: 你把1~8的 x&-x 用bit表示就知道為什麼了 04/28 12:17
cphe: 這種寫法其實不用去鑽研,除非你很常用,不然一週後你就忘了 04/28 12:18
cphe: 再來就是別人也不好讀 04/28 12:18
※ 編輯: zxcv14011 (140.113.91.107), 04/28/2018 18:53:16
oToToT: 他在寫binary index tree(fenwick tree)吧 04/28 20:20
xavier13540: 前面那格應該是x<=n吧 另外其實我也常常這樣寫@@ 04/29 03:09
y3k: 這種寫法還是有其必要性吧?而且其實蠻基本的... 04/30 09:01
uranusjr: 基本與否是一回事, 哪裡有必要性?沒有這種語法的語言多 04/30 18:41
uranusjr: 得是, 難道這些語言都有根本缺陷做不了正事嗎? 04/30 18:41
xavier13540: 是沒有必要性 但這樣寫精簡很多 可讀性也不差 04/30 22:02
iamstudent: 不要看太少又不想動腦就罵別人可讀性低 05/01 11:44
iamstudent: bitwise operator在driver應用上非常常見 05/01 11:45
iamstudent: 而且很多時候往往都是效率上的需求,會具有必要性 05/01 11:46
iamstudent: 沒有這類語法的語言,應該不會有人想用在driver上 05/01 11:47
iamstudent: 有興趣專研bitwise op的人,推薦去看Hacker's Delight 05/01 11:48
Lee1027: 感謝分享 05/08 02:10