计算 int 中使用的位数

2023-12-01

如果你有二进制数 10110 我怎样才能让它返回 5?例如,一个数字表示使用了多少位?下面列出了一些类似的例子:

  • 101 应返回 3
  • 000000011 应返回 2
  • 11100 应该返回 5
  • 101010101 应返回 9

在Java中如何以最简单的方式获得这个?我想出了以下方法,但我可以做得更快吗:

public static int getBitLength(int value)
{
    if (value == 0)
    {
        return 0;
    }
    int l = 1;
    if (value >>> 16 > 0) { value >>= 16; l += 16; }
    if (value >>> 8 > 0) { value >>= 8; l += 8; }
    if (value >>> 4 > 0) { value >>= 4; l += 4; }
    if (value >>> 2 > 0) { value >>= 2; l += 2; }
    if (value >>> 1 > 0) { value >>= 1; l += 1; }
    return l;
}

Easiest?

32 - Integer.numberOfLeadingZeros(value)

如果您正在寻找算法,Java API 的实现者会同意您的分而治之的位移方法:

public static int numberOfLeadingZeros(int i) {
    if (i == 0)
        return 32;
    int n = 1;
    if (i >>> 16 == 0) { n += 16; i <<= 16; }
    if (i >>> 24 == 0) { n +=  8; i <<=  8; }
    if (i >>> 28 == 0) { n +=  4; i <<=  4; }
    if (i >>> 30 == 0) { n +=  2; i <<=  2; }
    n -= i >>> 31;
    return n;
}

Edit:提醒那些相信浮点计算准确性的人,请运行以下测试工具:

public static void main(String[] args) {
    for (int i = 0; i < 64; i++) {
        long x = 1L << i;
        check(x);
        check(x-1);
    }
}

static void check(long x) {
    int correct = 64 - Long.numberOfLeadingZeros(x);
    int floated = (int) (1 + Math.floor(Math.log(x) / Math.log(2)));
    if (floated != correct) {
        System.out.println(Long.toString(x, 16) + " " + correct + " " + floated);
    }
}

第一个检测到的偏差是:

ffffffffffff 48 49
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算 int 中使用的位数 的相关文章

  • 日期语句之间的 JPQL SELECT [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想将此 SQL 语句转换为等效的 JPQL SELECT FROM events WHERE events date BETWE
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • Java 枚举与创建位掩码和检查权限的混淆

    我想将此 c 权限模块移植到 java 但是当我无法将数值保存在数据库中然后将其转换为枚举表示形式时 我很困惑如何执行此操作 在 C 中 我创建一个如下所示的枚举 public enum ArticlePermission CanRead
  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • Spring AspectJ 在双代理接口时失败:无法生成类的 CGLIB 子类

    我正在使用Spring的
  • 如何获取之前的URL?

    我需要调用我的网络应用程序的 URL 例如 如果有一个从 stackoverflow com 到我的网站 foo com 的链接 我需要 Web 应用程序 托管 bean 中的 stackoverflow 链接 感谢所有帮助 谢谢 并不总是
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • 检测并缩短字符串中的所有网址

    假设我有一条字符串消息 您应该将 file zip 上传到http google com extremelylonglink zip http google com extremelylonglink zip not https stack
  • 透视变换矩阵的计算

    给定 3D 空间中的一个点 如何计算齐次坐标中的矩阵 将该点投影到平面上z d 其中原点是投影中心 好吧 让我们尝试解决这个问题 扩展伊曼纽尔的答案 Assuming如果您的视图向量直接沿着 Z 轴 则所有尺寸都必须按视图平面距离的比例进行
  • 将 MOXy 设置为 JAXB 提供程序,而在同一包中没有属性文件

    我正在尝试使用 MOXy 作为我的 JAXB 提供程序 以便将内容编组 解组到 XML JSON 中 我创建了 jaxb properties 文件 内容如下 javax xml bind context factory org eclip
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • 双枢轴快速排序和快速排序有什么区别?

    我以前从未见过双枢轴快速排序 是快速排序的升级版吗 双枢轴快速排序和快速排序有什么区别 我在 Java 文档中找到了这个 排序算法是双枢轴快速排序 作者 弗拉基米尔 雅罗斯拉夫斯基 乔恩 本特利和约书亚 布洛赫 这个算法 在许多数据集上提供
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp

随机推荐

  • 执行动态加载的JS文件

    我理解JS是单线程 同步执行的 因此 当我将文件添加到浏览器头标记时 该文件一遇到就会执行 然后它转到下一个脚本标记并执行该文件 我的问题是当我将 js 文件动态添加到 HTML head 标记时 浏览器如何执行该文件 是不是像当前执行的地
  • 如何用CSS将矩形图像“裁剪”成正方形?

    我知道用 CSS 实际修改图像是不可能的 这就是为什么我将裁剪放在引号中 我想做的是拍摄矩形图像并使用 CSS 使它们显示为正方形而不扭曲图像 我基本上想把这个 进入这个 没有包装器的纯 CSS 解决方案div或其他无用的代码 img ob
  • 在启动时设置默认的 matlab 路径

    我的团队正在尝试标准化我们的 Matlab 路径 以便每个人都有相同的路径 我有一个我们都应该拥有的默认 matlab 路径列表 因此 我们希望有一个在 matlab 打开时运行的脚本 以确保我们的路径设置为默认的 matlab 路径 因此
  • 如何使用 PHP 从 HTML 代码中删除多余的
    标签?

    我正在用 PHP 解析一些凌乱的 HTML 代码 其中有一些冗余标签 我想清理一下它们 例如 br br br br 我如何使用 preg replace 替换类似的东西 br br 换行符 空格以及它们之间的差异 br br and br
  • 无法施展通用套装?

    我今天遇到一个有趣的问题 考虑下面的代码 public static class Parent public static class Child extends Parent Set
  • 如何用 R 中的特定值替换 NA 值?

    我有一个时间序列数据框 但该数据包含 NA 如下所示 KQ11 Open KQ11 High KQ11 Low KQ11 Close KQ11 Volume KQ11 Adjusted 2017 04 05 627 89 630 17 62
  • 使用 AngularFire 中的记录进行基本用户身份验证

    在花了几天时间尝试不同的 各种推荐的方法来做到这一点之后 我找到了我认为最简单和最有希望的方法 也感谢这个问题的好心人 获取 Firebase AngularFire 中项目的索引 ID 当前设置 用户可以使用电子邮件和社交网络登录 因此当
  • turtle.done() 在 Spyder 中不起作用

    这个简单的 Python 脚本 import turtle bob turtle Turtle bob forward 50 turtle done 使用 Spyder 运行时会出现错误 第一次运行按预期工作 但之后 IPython 控制台
  • BadFilterError:过滤器无效:每个查询只能有一个属性具有不等式过滤器(<=、>=、<、>)

    我正在尝试对两个不同的属性应用过滤器 但 GAE 不允许我这样做 那么解决方案是什么 这是代码片段 if searchParentX que filter parentX gt searchParentX filter parentX lt
  • TWIG - 在不同模板中包含变量

    我想在不同的模板中包含相同的变量 vars catchphrase twig set catchphrase size if var tile catchphrase length lt 4 set catchphrase size siz
  • 各种符号(*、&等)与参数组合有什么区别? [复制]

    这个问题在这里已经有答案了 可能的重复 我知道这对你们许多人来说可能是一个非常基本的问题 但尽管我尽了最大的努力 但我确实很难找到一个好的 彻底的解释 我确信答案就在那里 所以我的搜索词一定很糟糕 在 C 中 使用各种符号及其组合来标记参数
  • 如何使用电影动画正确引用无花果和斧头

    data dict x 0 0 3760 448435678077 0 12 4851 68102541007 0 2226 5297 61518907981 0 2479 4812 134249142693 0 2724 4756 529
  • 可访问性在模拟器上有效,但在设备上无效

    在我的项目中 我使用 Apple 提供的 Reachability 类 当没有互联网连接时 我会显示一条警报消息 当我在模拟器上测试它时 一切工作正常 但是当我在 iPad 上运行它时 在没有互联网的情况下不会显示警报消息 我在 iOS 5
  • 如何将向量写入FileStorage

    我已经能够使用 FileStorage 成功地将关键点 向量 描述符 Mat 和其他内容写入 yml 文件 但是 在计算一对图像之间的匹配后 我无法将匹配写入文件 我假设这是因为 DMatch 似乎是一个具有距离 trainIdx 等字段的
  • 如何从元素中删除所有属性

    如何删除整个文档中特定元素的所有属性 我正在尝试这样的事情 from bs4 import UnicodeDammit from lxml import html content open source html read document
  • iOS:将图像幻灯片的 setImageInputs 设置为图像数组

    我正在使用来自的图像幻灯片here iconArr UIImage named home min UIImage named category min UIImage named settings min UIImage named con
  • 在数据库的 dplyr 过滤函数中传递 SQL 函数

    我在用着dplyr的自动SQL后端从数据库表中查询子表 例如 my tbl lt tbl my db my table where my table在数据库中看起来像 batch name value batch A 1 1 batch A
  • 使用 Powershell 替换方括号

    如果您有一个文件名 例如 委员会会议纪要 2010 年 10 月 hq doc 如何让 Powershell 替换方括号 以下不起作用 ls filter foreach Process Rename Item NewName Name r
  • 如何在slick中使用事务

    我有这样的插入方法 权重是索引 implicit def run A action DBIOAction A NoStream lt slick dbio Effect Future A db run action def insert n
  • 计算 int 中使用的位数

    如果你有二进制数 10110 我怎样才能让它返回 5 例如 一个数字表示使用了多少位 下面列出了一些类似的例子 101 应返回 3 000000011 应返回 2 11100 应该返回 5 101010101 应返回 9 在Java中如何以