[問題] 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