相当于 De Bruijn LSB,但适用于 MSB

2024-03-19

有谁知道类似于 De Bruijn 的 LSB 但针对 MSB 的算法吗?或者确定 MSB 的最有效方法?

我知道 Log_2(Val) 会这样做,但我不知道这是否是最有效的方法。

我需要它的原因是我需要将小端转换为大端。我知道这个的标准算法。然而,输入是 64 位,但数字通常是 16 或 24 位,因此 99.9% 的情况下不需要交换整个 8 个字节。


这不正是http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogDeBruijn http://graphics.stanford.edu/~seander/bithacks.html#IntegerLogDeBruijn ?

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

相当于 De Bruijn LSB,但适用于 MSB 的相关文章

  • 大整数的按位运算

    我正在实现 BER 压缩整数的解码 最近我发现了与大整数按位运算相关的奇怪 JavaScript 行为 E g var a 17516032 has 25 bits alert a lt lt 7 outputs 2052915200 al
  • 按位运算如何提高 Asm.js 的性能?

    在 Asm js 定义的第一行有一个基于 Asm js 的代码示例 它解释了按位运算有助于获得更快的 JS 代码 HEAP32 p gt gt 2 0 or x y 0 我的问题是 这个操作如何提高性能 在 Asm js 或 Emscrip
  • 如何从 Swift 中的整数获取特定位?

    尝试将我的应用程序从 C 转换为 Swift C static QWORD load64 const OCTET x char i QWORD u 0 for i 7 i gt 0 i u lt lt 8 u x i return u Sw
  • 整数除以 3 最快的方法是什么?

    int x n 3 lt make this faster for instance int a n 3 lt normal integer multiplication int b n lt lt 1 n lt potentially f
  • 如何更改32位寄存器的特定位而不更改其他位?

    我想直接使用寄存器的物理地址来操作寄存器的某些位 但是我找不到方法来做到这一点 我看到一些关于设置位掩码的帖子 但我发现它们太令人困惑了 我的寄存器物理地址是 0x4A10005C 我想操纵它的 18 16 位之间的位 我想设置0x3在那些
  • 该浮点数小数部分的前 32 位是多少?

    我正在看以下内容SHA256 伪代码 http en wikipedia org wiki SHA 2 SHA 256 28a SHA 2 variant 29 pseudocode在维基百科上 具体来说 我正在查看以下部分 Initial
  • 按位运算实现逻辑右移[重复]

    这个问题在这里已经有答案了 因此 我正在尝试解决这项家庭作业 但我已经被这个特定问题困扰了几个小时 但无法解决 我感觉我是如此接近 但后来我改变了代码中的一些东西 还有一些东西是不对的 logicalShift shift x to the
  • 如何在javascript中从大数中计算位?

    我有大量的数字存储在字符串中 let txt 10000000000000041 那么我如何计算二进制格式中呈现的位呢 例如 9的二进制格式是1001 没有1的二进制格式是2 到目前为止我做了什么 const countOne num gt
  • 检查位掩码的特定位

    我正在与Bitmasks in python 据我所知 这些是整数数组 当它们解压缩为二进制格式时 它们会告诉您数组中给定元素的 32 位中的哪一个被设置 1 我想知道检查数组的任何元素是否设置了 4 个特定位的最快方法 我不关心其余的 我
  • 将位的字符串表示形式转换为字节

    我刚刚开始学习文件压缩 但遇到了一些障碍 我有一个应用程序将诸如 程序 之类的字符串编码为压缩的二进制表示形式 010100111111011000 请注意 这仍然存储为字符串 Encoding g 111 r 10 a 110 p 010
  • 左移 255 位(作为一个字节)

    谁能解释为什么以下内容无法编译 byte b 255 lt lt 1 错误 常量值 510 无法转换为 字节 我期待二进制的以下内容 1111 1110 类型转换难倒了我 C 中的数字文字是int not byte 编译器将评估位移位 因此
  • 如果可能的话,如何在 C 中定义 2 位数字?

    对于我的大学过程 我正在模拟一个称为随机顺序吸附的过程 我必须做的一件事是随机地将正方形 不能重叠 放置到格子上 直到没有更多空间为止 重复该过程几次以找到平均 干扰 覆盖率 基本上我正在对一个大的整数数组执行操作 其中存在 3 个可能的值
  • F找出打开所有灯泡的最少开关数量

    我试图理解给出的问题here http qa geeksforgeeks org 4118 find the minimum number switches you have press turn all bulbs及其解决方案 问题指出
  • 声明按位运算的掩码

    我是这样的低级操作的新手 我希望有人能指出我在这里犯的明显错误 Input value 00111100 I want to get the value of the bits at indexes 1 3 i e 0111 byte ma
  • 使用乘法执行整数除法[重复]

    这个问题在这里已经有答案了 查看编译器生成的 x86 程序集 我注意到 无符号 整数除法有时会实现为整数乘法 这些优化似乎遵循以下形式 value n gt value 0xFFFFFFFF n 1 0x100000000 例如 除以 9
  • 计算无符号长整型序列中的公共位

    我正在寻找比下面更快的算法 给定一个 64 位无符号整数序列 返回该序列中每个 64 位被设置的次数计数 Example 4608 000000000000000000000000000000000000000000000000000100
  • 对二进制数的字符串表示进行按位运算 python 2.7

    我想对二进制数的两个字符串表示执行按位或 但我不知道如何将字符串转换为原始二进制 a 010110 b 100000 a b 应该产生 110110 然后我想计算 on 位的数量 这应该返回 4 您可以使用内置的将字符串转换为二进制int
  • 删除最低位

    给定一个二进制数 删除最低位的最快方法是什么 01001001010 gt 01001001000 它将在代码中用于迭代变量的位 伪代码如下 while bits 0 index getIndexOfLowestOrderBit bits
  • 在 C++ 中将 64 位值左移 64 位给出奇怪的结果[重复]

    这个问题在这里已经有答案了 可能的重复 64位移位问题 https stackoverflow com questions 1024968 64bit shift problem 我在 Windows 8 64 位上使用 Visual St
  • 如何快速将 Int16 转换为两个 UInt8 字节

    我有一些二进制数据 将两个字节值编码为有符号整数 bytes 1 255 0xFF bytes 2 251 0xF1 Decoding 这相当简单 我可以提取一个Int16这些字节的值 Int16 bytes 1 lt lt 8 Int16

随机推荐