例如:
howManyBits(0) = 1;
howManyBits(-1) = 1;
howManyBits(7) = 4;
howManyBits(-10) = 5;
问题出来的是,我只能使用比特操作员来找到这一点,我的常数不能大于字节,而且我总共不能超过90个操作。 在那一刻,我能够从最重要的一点点涂抹1个,然后我计数其中的每一个。但是,由于它是一个32位的INT,并且每次我检查一下时,我都必须将INT超过1个转移到右边位涂抹花了20,我超过了最大的操作。,也不允许我在解决方案中使用条件或环。
我知道,如果我能找出可以解决它的log_2算法,但是我也无法仅在比特运算符中弄清楚这一点。 我想要的所有这些都暗示/解释一个过程,该过程可以在更少的操作中进行,而不是实际的代码解决方案。谢谢!
您可以在7个操作中找到32位编号的log_2。看到出色的the twiddlinghacks
-huston-你有问题。
I.E.howManyBits(0) = howManyBits(-1) = 1;
您可以通过三个操作组合将其删除(对于正数)
1) Shift right 1
2) Test for 0
3) Add 1 to a number
希望您能把您带到那里。 由于源编号将在两个补充中,因此您需要将其转换为正数,以使上述有效。