这是我昨晚为我设计的一个较大的编程任务的一部分。无法弄清楚这个问题,但我很好奇它是如何解决的。创建一个掩码,标记最重要的设置位,只使用按位运算符
函数int greatestBitPos(int x)
应该返回一个int掩码,它标记最高有效位的位置。如果x == 0,则返回0.没有控制结构(如果,但是,?:)允许。
例子:greatestBitPos(96) = 0x40
合法经营! 〜&^| + < < >> =
This website on bit twiddling是我用作起点的东西,特别是第二种算法。但是,它使用<
比较,这个问题不允许。
欢迎任何想法,谢谢!
编辑:请假设2的补码,32位整数。对于所有负数,它们都设置了最高位,所以返回值应该是0x80000000
。
SergeyL:这太糟糕了,你删除了你的答案。你可以写'+〜0'而不是'-1'并且说“这个假设是2的补码”。 – 2014-01-28 18:20:46
两个补码是正确的假设。我将编辑该问题。 – rywhite
@ H2CO3不是我删除它的原因。它返回除了最低有效集之外的所有比特。 –