这是我目前正在处理的家庭作业问题。我们要做的是查看传递的 32 位 int x 并返回将这个值存储在 2s 补码中所需的最少位。
例如:
howManyBits(0) = 1;
howManyBits(-1) = 1;
howManyBits(7) = 4;
howManyBits(-10) = 5;
问题在于我只能使用按位运算符来找到它,我不能有大于一个字节的常量,而且我总共不能有超过 90 个操作。目前,我能够从最高位一直向右涂抹一个 1,然后我计算其中的每个 1。但是,由于它是一个 32 位的 int,并且每次检查是否有位翻转时,我都必须将 int 向右移动 1,因此对位进行计数的过程本身需要 90 次操作,并且由于位涂抹拿了20,我已经超过了最大操作。
此外,我不会大声在我的解决方案中使用条件或循环。
我知道如果我能找出一个可以解决它的 log_2 算法,但我也无法仅在位运算符中解决这个问题。
我想要的只是提示/解释一个可以在更少的操作中完成的过程,而不是实际的代码解决方案。谢谢!