我目前正在尝试编写一个算法来确定表示数字 x 需要多少位。我的实现将在 c 中。
不过,有一些问题,我几乎只能使用按位运算符 {~、&、^、|、+、>}。另外,我不能使用任何类型的控制流(if、while、for)。
我最初的方法是从左到右检查二进制数,并查找第一个“1”出现的位置。鉴于我所受到的限制,我不确定如何解决这个问题。
我正在使用的数字可以被视为无符号整数。因此 00110 只需要 3 位。
我想知道是否有一种更简单/更干净的方法来做到这一点,而我错过了它?
或者如果有人可以给出一些提示?
基本上,我试图在没有 while 循环的情况下实现这一点:
int result = 0;
while (x >>= 1) {
result += 1;
}
return result;
http://www-graphics.stanford.edu/~seander/bithacks.html#IntegerLog http://www-graphics.stanford.edu/~seander/bithacks.html#IntegerLog
展示如何在没有控制流的情况下做到这一点。
unsigned int v; // 32-bit value to find the log2 of
register unsigned int r; // result of log2(v) will go here
register unsigned int shift;
r = (v > 0xFFFF) << 4; v >>= r;
shift = (v > 0xFF ) << 3; v >>= shift; r |= shift;
shift = (v > 0xF ) << 2; v >>= shift; r |= shift;
shift = (v > 0x3 ) << 1; v >>= shift; r |= shift;
r |= (v >> 1);
r++;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)