这是我目前正在处理的作业问题。我们要做的是查看传递的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算法,但是我也无法仅使用按位运算符来解决这个问题。
我所希望的只是暗示/解释一个过程,该过程将以较少的操作而不是实际的代码解决方案来完成。谢谢!
最佳答案
您可以通过7个操作找到32位数字的log_2。见优秀的Bit Twiddling Hacks