我正处于一种独特的情况,在这种情况下,搜索“最重要的一点”会产生太多的结果,我找不到符合我需要的答案!
问题本身很简单:“如何在无符号long中找到最有意义的集合位?”当我进行计算时,最右边的位位置是位置“0”。
我知道它包括掩蔽最低位,检查,然后在递增计数时向左移动一次,然后用第二个最低位重复,等等。
我以前做过,但不管是什么原因我现在不能做。
编辑:我说的“最重要”是指最左边的设置位,很抱歉有任何混乱!*
下面是我的功能解决方案和一些测试用例:
#include <stdio.h>
int findExponent( unsigned long L ){
int exponent = -1;
unsigned long shift = L;
while( 0 != shift )
exponent++, shift >>=1;
if ( exponent >= 0 )
printf("The most significant bit of L is at position %d\n", exponent);
else{
exponent = 0;
printf("L is zero\n");
}
return exponent;
}
int main(int argc, char** argv){
long check = 8L;
findExponent( check );//2
findExponent( 21421L );//14
findExponent( 0L );//(is zero)
findExponent( 1L );//0
}
最佳答案
“如何在无符号long中找到最有意义的位?”
你可以向右移动直到最后一个1被删除。此时,值变为0。
#include <stdio.h>
int main(void) {
unsigned long x = 3333;
unsigned long y = x;
int p = -1;
while (0 != y)
p++, y >>= 1;
if (p >= 0)
printf("The most significative bit of x is at position %d\n", p);
else
printf("x is zero\n");
}
关于c - 长时间找到最高有效位,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18939998/