找出在二进制中表示正整数所需的位数?
2022-09-01 07:05:07
这可能是非常基本的,但是为了节省我一个小时左右的悲伤,任何人都可以告诉我如何计算出在Java中表示给定正整数所需的位数?
例如,我得到一个十进制的11,(1011)。我需要得到答案,4。
我想,如果我能弄清楚如何将除最高有效位以外的所有位设置为0,然后>>>它,我会得到我的答案。但。。。我不能。
这可能是非常基本的,但是为了节省我一个小时左右的悲伤,任何人都可以告诉我如何计算出在Java中表示给定正整数所需的位数?
例如,我得到一个十进制的11,(1011)。我需要得到答案,4。
我想,如果我能弄清楚如何将除最高有效位以外的所有位设置为0,然后>>>它,我会得到我的答案。但。。。我不能。
好吧,答案很简单。如果您有一个整型值:
int log2(int value) {
return Integer.SIZE-Integer.numberOfLeadingZeros(value);
}
龙...
[编辑]如果剃须毫秒是一个问题,Integer.numberOfLeadingZeros(int)是相当有效的,但仍然可以执行15次操作...扩展合理的内存量(300 字节,静态),您可以将其削减到 1 到 8 个操作之间,具体取决于整数的范围。
好吧,你可以数一下在你只剩下零之前你向右移动了多少次:
int value = 11;
int count = 0;
while (value > 0) {
count++;
value = value >> 1;
}