aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bits.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/bits.c b/bits.c
index 7e0ed68..8652b1a 100644
--- a/bits.c
+++ b/bits.c
@@ -67,7 +67,28 @@ int samesign(int x, int y) {
* Difficulty: 4
*/
int logtwo(int v) {
- return 2;
+ int r = 0;
+ int s;
+
+ s = (v > 0xFFFF) << 4;
+ v = v >> s;
+ r = r | s;
+
+ s = (v > 0xFF) << 3;
+ v = v >> s;
+ r = r | s;
+
+ s = (v > 0xF) << 2;
+ v = v >> s;
+ r = r | s;
+
+ s = (v > 0x3) << 1;
+ v = v >> s;
+ r = r | s;
+
+ r = r | (v >> 1);
+
+ return r;
}
/*