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

新手上路,请多包涵

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

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

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

原文由 joinJpegs 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 363
2 个回答

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

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

原文由 i_am_jorf 发布,翻译遵循 CC BY-SA 3.0 许可协议

嗯,答案很简单。如果你有一个 int 值:

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

Long也一样……

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

原文由 Varkhan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题