C#中的Java Integer.highestOneBit

Ama*_*Dev 3 c# java int integer

我一直在努力寻找C#中Java的Integer.highestOneBit(int)的确切替代品.

我甚至尝试找到它的源代码但无济于事.

JavaDocs告诉该函数:"返回一个int值,其中最多只有一位,位于指定int值中最高位("最左侧")的一位."

那么我将如何在C#中实现它呢?任何帮助或链接/重定向表示赞赏.

JLR*_*she 5

该站点提供了一个应该在C#中工作的实现,只需进行一些修改:

public static uint highestOneBit(uint i) 
{
    i |= (i >>  1);
    i |= (i >>  2);
    i |= (i >>  4);
    i |= (i >>  8);
    i |= (i >>  16);
    return i - (i >> 1);
}
Run Code Online (Sandbox Code Playgroud)

http://ideone.com/oEiNcM

它基本上用1s填充低于最高位的所有位,然后除去最高位之外的所有位置.

示例(仅使用16位而不是32位):

start: i =        0010000000000000
i |= (i >> 1)     0010000000000000 | 0001000000000000 -> 0011000000000000
i |= (i >> 2)     0011000000000000 | 0000110000000000 -> 0011110000000000
i |= (i >> 4)     0011110000000000 | 0000001111000000 -> 0011111111000000
i |= (i >> 8)     0011111111000000 | 0000000000111111 -> 0011111111111111
i - (i >> 1)      0011111111111111 - 0001111111111111 -> 0010000000000000
Run Code Online (Sandbox Code Playgroud)