比较两个数字的最高位:==、<、<=

本约翰

是否有一个快速位操作要实现msb_equal:一个函数来检查两个数字是否具有相同的最高有效位?

例如,0b000100并且0b000111两者都将 4 作为其最高有效位值,因此它们最多msb_equal. 相比之下0b001111,MSB 值为 8,MSB 值为0b01000016,因此这对不是 msb_equal

同样,是否有快速计算 < 和 <= 的方法?

例子:

msb_equal(0, 0) => true
msb_equal(2, 3) => true

msb_equal(0, 1) => false
msb_equal(1, 2) => false
msb_equal(3, 4) => false

msb_equal(128, 255) => true

一条评论询问为什么 0 和 1 不等于 msb_equal。我对此的看法是,如果我用二进制写出两个数字,当每个数字中的最高有效 1 位是相同的位时,它们是 msb_equal 。

写出2和3:

2 == b0010
3 == b0011

在这种情况下,每个数字中最上面的 1 是相同的

写出 1 & 0:

1 == b0001
0 == b0000

在这里,最上面的 1 是不一样的。

可以说,由于0没有最高设置位,msb_equal(0,0)是不明确的。我将其定义为true:我觉得这很有帮助且始终如一。

本约翰

是的,有基于位的快速运算来计算 MSB 相等和不等式。

语法注意事项

我将使用 c 语言语法为按位和逻辑运算符提供实现:

  • |– 按位或。||– 逻辑或。
  • &– 按位与。&&– 逻辑与。
  • ^ – 按位异或。

==

msb_equal(l, r) -> bool
{
  return (l^r) <= (l&r)
}

<

这是从Z 阶曲线上的 Wikipedia 页面获取的很棒):

msb_less_than(l, r) -> bool
{
  (l < r) && (l < l^r)
}

<=

msb_less_than_equal(l, r) -> bool
{
  (l < r) || (l^r <= l&r)
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何比较两个数字提取

来自分类Dev

高效比较两个数字范围

来自分类Dev

比较两个数字,ramdajs

来自分类Dev

比较从文件读取的两个数字

来自分类Dev

高效比较两个数字范围

来自分类Dev

比较两个数字并将值1或0设置为Excel或SQL Server 2012中的最高或最低

来自分类Dev

比较两个数字并将值1或0设置为Excel或SQL Server 2012中的最高或最低

来自分类Dev

比较数字bash中的两个数字

来自分类Dev

Shell脚本比较两个数字数组

来自分类Dev

比较两个数字的VBA代码给出不同的结果

来自分类Dev

比较表示为链表的两个数字

来自分类Dev

Matlab比较两个数字不起作用

来自分类Dev

使用ZEROFILL精确比较两个数字

来自分类Dev

字典比较两个数字的快速方法

来自分类Dev

CMD比较输入中的两个数字

来自分类Dev

交换元组值以比较两个数字

来自分类Dev

比较两个数字的时间复杂度

来自分类Dev

知道数字的最高位数

来自分类Dev

比较基于两个数字列的两个数据框,并找到在彼此的数字阈值内匹配的行

来自分类Dev

比较两个数组

来自分类Dev

比较两个数组

来自分类Dev

两个数字的最大AND

来自分类Dev

我想比较两个数组,并从1到另一个匹配最高的出现率?

来自分类Dev

比较JavaScript中的两个数字,它们是双精度数以及使用==或===会怎样?

来自分类Dev

比较Lua中的两个数字时计算位数差异

来自分类Dev

如何使用angularjs比较输入字段中的两个数字?

来自分类Dev

计算机如何在底层比较两个数字?

来自分类Dev

使用JavaScript Number()函数比较两个数字的相等性

来自分类Dev

比较两个数字中的有效位数

Related 相关文章

热门标签

归档