找出在二进制中表示正整数所需的位数?

2022-09-01 07:05:07

这可能是非常基本的,但是为了节省我一个小时左右的悲伤,任何人都可以告诉我如何计算出在Java中表示给定正整数所需的位数?

例如,我得到一个十进制的11,(1011)。我需要得到答案,4。

我想,如果我能弄清楚如何将除最高有效位以外的所有位设置为0,然后>>>它,我会得到我的答案。但。。。我不能。


答案 1

好吧,答案很简单。如果您有一个整型值:

int log2(int value) {
    return Integer.SIZE-Integer.numberOfLeadingZeros(value);
}

龙...

[编辑]如果剃须毫秒是一个问题,Integer.numberOfLeadingZeros(int)是相当有效的,但仍然可以执行15次操作...扩展合理的内存量(300 字节,静态),您可以将其削减到 1 到 8 个操作之间,具体取决于整数的范围。


答案 2

好吧,你可以数一下在你只剩下零之前你向右移动了多少次:

int value = 11;
int count = 0;
while (value > 0) {
    count++;
    value = value >> 1;
}

推荐