我必須編寫一個函數來計算以2的補碼形式表示int所需的位數。要求:計算所需的位數以表示2的補碼整數
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個運營商的限制。任何建議,我該如何修復和改進這個算法?
我需要更好的解釋你想要的號碼。假設輸入數字是十進制的68,即「01000010」二進制。你期望什麼答案? – 2013-04-07 20:44:35