如何获取C中最右边设置位的位置

2024-04-05

int a = 12;

例如:12 的二进制是 1100,所以答案应该是 3,因为设置了右起第 3 位。

我想要最后一个最设置位的位置a。谁能告诉我该怎么做。

NOTE:我只想要位置,在这里我不想设置或重置该位。所以它与 stackoverflow 上的任何问题都不重复。


这个答案取消设置最右边的设置位 https://stackoverflow.com/a/4704041/3625404告诉如何获取和取消设置最右边的设置位对于表示为二进制补码的无符号整数或有符号整数.

获取最右边的设置位,

x & -x
// or
x & (~x + 1)

取消设置最右边的设置位,

x &= x - 1
// or
x -= x & -x  // rhs is rightmost set bit

为什么它有效

x:                     leading bits  1  all 0
~x:           reversed leading bits  0  all 1
~x + 1 or -x: reversed leading bits  1  all 0
x & -x:                       all 0  1  all 0

eg, let x = 112,并为简单起见选择 8 位,尽管对于所有大小的整数来说这个想法都是相同的。

// example for get rightmost set bit
x:             01110000
~x:            10001111
-x or ~x + 1:  10010000
x & -x:        00010000

// example for unset rightmost set bit
x:             01110000
x-1:           01101111
x & (x-1):     01100000
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取C中最右边设置位的位置 的相关文章

随机推荐

  • 将我现有的富文本 UI 与 CKEditor API 结合使用

    我有一个现有的富文本 UI 我想将其与 CKEditor 一起使用 基本上 我希望 CKEditor 能够处理应用样式 格式 过滤和规范化插入内容的复杂部分 我现有的 UI 需要驱动交互并根据选择显示状态 即 选择粗体文本应反映在 UI 中
  • 如何在不使用 Github 的情况下使用 Git 在项目中进行协作?

    我是 Git 和 Github 的初学者 但仍然对它们感到困惑 据说我们在与其他人协作时可以不用Github而使用Git 然而 也有人说 Git 可以在本地计算机上运行 如果我们不使用 Github Git 只能在本地运行 我们如何进行协作
  • 比较字符串的瓶颈

    这是一个后续问题C 中的 Char 与 String Speed https stackoverflow com q 3989111 363829 我声明了以下变量 std vector
  • 在 BroadcastReceiver 扩展类中使用 getContentResolver

    我必须在扩展 BroadcastReceiver 的类中使用 getContentResolver 方法 并且我发现 getContentResolver 只能在扩展 Activity 的类中使用 我尝试在扩展活动的类中执行静态方法 但无法
  • 错误 CS7036 没有给出与“SpecflowBaseTest.SpecflowBaseTest(IWebDriver)”所需的形式参数“driver”相对应的参数

    我正在创建一个新框架 因为 PageFactory 已被弃用 我收到错误 Error CS7036 There is no argument given that corresponds to the required formal par
  • 录制视频时将动态文本渲染到 CVPixelBufferRef 上

    我正在使用录制视频和音频AVCaptureVideoDataOutput and AVCaptureAudioDataOutput并在captureOutput didOutputSampleBuffer fromConnection 委托
  • 当线程数超过 32705 时 boost::thread_resource_error

    我正在实现消息传递算法 消息通过图的节点传播 阻塞直到它们收到足够的信息 来自其他邻居 来发送消息 如果我将每条消息放入其自己的线程中并使用 boost condition 来暂停线程 直到所有必需的信息可用 则该算法很容易编写 我创建了数
  • Laravel - 何时使用 ->get()

    我很困惑什么时候 gt get 在拉拉维尔 E G DB table users gt find 1 不需要 gt get 来检索结果 也不需要User find 1 laravel 文档说 使用 get 或第一个方法执行查询 我已阅读 F
  • 使用 Javascript 跨浏览器处理“Enter”键按下

    我有以下示例 可以轻松检测到 Enter 键按下并正确处理它 这里是
  • bookshelf.js 计数方法

    我一直在寻找如何使用 Bookshelf js 进行基本计数 例如 SELECT COUNT something FROM table 但无济于事 我有什么遗漏的吗 或者它只是与手动选择查询一起使用 Thanks 目前这是一个手动查询 例如
  • 通过 Powershell 关闭时无法停止所有 Excel 进程

    使用此代码 我打开 excel 使用visible false 以便用户看不到它 写入工作簿 然后在脚本结束后打开 excel 使其可见 或完全关闭它而不保存 当我保存 Excel 使其保持打开状态 结束脚本 然后稍后手动关闭 Excel
  • 如何将 JavaScript 中的数字除以任意精度(例如小数点后 28 位)

    我知道https floating point gui de https floating point gui de 事实上 有许多库可以帮助处理大数 但令人惊讶的是 我找不到任何可以处理除法运算结果中小数点后 19 位以上的库 我花了几个
  • 在 Windows 中批量将 cp1252 转换为 utf-8

    所以 我一直在尝试使用我在网上找到的提示和矩阵 将大型java源代码树从cp1252转换为Windows中的UTF 8 特别是here https stackoverflow com a 9310774 问题是 我在 Windows 上 我
  • 将 Select 语句放在 Hibernate 事务上

    我已经阅读了一段时间有关 Hibernate 的内容 但我似乎无法理解有关 Hibernate 的一个概念Transaction 在我访问过的一些网站上 Select语句处于事务模式是这样的 public List
  • 使用短语构建语料库

    我的文件如下 doc1 very good very bad you are great doc2 very bad good restaurent nice place to visit 我想让我的语料库与 这样我的最后DocumentT
  • 将点云转换为深度/多通道图像

    我有一个通过使用立体相机扫描平面生成的点云 我已经生成了法线 fpfh 等特征 并使用这些信息我想对点云中的区域进行分类 为了能够使用更传统的 CNN 方法 我想将此点云转换为 opencv 中的多通道图像 我将点云折叠到 XY 平面 并与
  • 如何在 Safari HTML5 中启用表格行的重影效果?

    当我拖动项目时没有重影效果 table行 在 Safari 上 我用table所以这是一个tr 幻影效果是指您可以看到跟随鼠标移动的项目 在 Chrome FF 上它可以工作 有人知道为什么吗 我注意到它不仅在tr td 如果我使用li o
  • RSA 加密 AES 密钥的强度

    我目前正在开发一个在客户端和服务器之间传输数据的系统 并且想知道我计划使用的加密强度是多少 我的想法是拥有一个私钥 公钥 RSA 密钥对 并将公钥分发给每个客户端 将私钥仅保留在服务器上 然后 每个客户端将生成自己的 AES 密钥并使用 R
  • 绝对定位与固定定位

    我有一个自定义对话框 当我单击按钮时会显示该对话框 显示对话框后 我会显示一个覆盖图 覆盖层的高度和宽度为100 x 100 问题来了 高度 100 只是获取浏览器窗口的高度 所以当我在页面上向下滚动时 它仍然位于顶部 如何将其高度设置为整
  • 如何获取C中最右边设置位的位置

    int a 12 例如 12 的二进制是 1100 所以答案应该是 3 因为设置了右起第 3 位 我想要最后一个最设置位的位置a 谁能告诉我该怎么做 NOTE 我只想要位置 在这里我不想设置或重置该位 所以它与 stackoverflow