我正处于一种独特的情况,在这种情况下,搜索“最重要的一点”会产生太多的结果,我找不到符合我需要的答案!
问题本身很简单:“如何在无符号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/

10-12 15:04