我遇到了代碼original link of code,其中的一部分對我來說不清楚。現在有條件地設置或清除位
bool f; // conditional flag
unsigned int m; // the bit mask
unsigned int w; // the word to modify: if (f) w |= m; else w &= ~m;
w ^= (-f^w) & m;
// OR, for superscalar CPUs:
w = (w & ~m) | (-f & m);
,符合w ^= (-f^w) & m;
和線w = (w & ~m) | (-f & m);
他們使用-f
。當我嘗試沒有-f
,只是使用f
它給了我相同的答案。即使在初始化f=true/false
的值後我試圖打印-f
,它仍然保持不變並且不會改變。請問有人能告訴我-f
這裏的重要性。
當執行這個語句時'w'被初始化:'w^=(-f^w)& m;' –
對於那些想知道https://graphics.stanford.edu/~seander/bithacks.html#ConditionalSetOrClearBitsWithoutBranching的人來說,您應該始終添加源文件併爲原作者提供信用。 – user2485710
當然,這就是爲什麼我寫我碰到一個代碼。不過,你是對的,謝謝。 – user3508953