我对这样的按位运算问题毫无头绪:
生成掩码,指示 x 中最左边的 1。假设 w=32。
例如,0xFF00 -> 0x8000 和 0x6600 -> 0x4000。
如果 x = 0,则返回 0。
该题还限制了只能使用按位运算和“-”“+”来解决问题。
我能理解此类问题的解决方案。但第一次遇到的时候我没有任何线索。这是否意味着我缺乏任何知识,例如离散数学?有没有熟练按位运算的来源?
这是一种方法:
m
,仅设置最高位 (1u << 31
)。m
达到0
,在每次迭代结束时将其右移一步。m & value_to_check
(按位与)是否非零。如果是的话,就分手吧m
将设置value_to_check
中最左边的位(如果value_to_check
为零,则为零)。