我必须编写一个函数来计算以 2 的补码形式表示 int 所需的位数。要求:
1. can only use: ! ~ & ^ | + << >>
2. no loops and conditional statement
3. at most, 90 operators are used
目前,我在想这样的事情:
int howManyBits(int x) {
int mostdigit1 = !!(0x80000000 & x);
int mostdigit2 = mostdigit1 | !!(0x40000000 & x);
int mostdigit3 = mostdigit2 | !!(0x20000000 & x);
//and so one until it reach the least significant digit
return mostdigit1+mostdigit2+...+mostdigit32+1;
}
但是,这个算法不起作用。它也超过了 90 个操作员的限制。有什么建议,我该如何修复和改进这个算法?