gpt4 book ai didi

c++ - 用于检查数字是否在特定范围内的位旋转

转载 作者:可可西里 更新时间:2023-11-01 15:03:51 25 4
gpt4 key购买 nike

我在 ICU 库(Unicode 的国际组件)的 "source\common\unicode\utf.h" 文件中发现了一些有趣的细节。 bit twiddling 用于检查数字是否在特定范围内。

// Is a code point in a range of U+d800..U+dbff?
#define U_IS_LEAD(c) (((c)&0xfffffc00)==0xd800)

我已经弄清楚魔数(Magic Number) (0xfffffc00) 来自:

MagicNumber = 0xffffffff - (HighBound - LowBound)

但是,我还发现该公式并不适用于所有任意范围。这里有人知道公式在什么情况下有效吗?

检查数字是否在特定范围内是否还有其他麻烦?

最佳答案

要应用这些技巧,数字在其二进制表示中必须具有一些共同特征。

0xD800 == 0b1101_1000_0000_0000
0xDBFF == 0b1101_1011_1111_1111

这个测试真正做的是屏蔽掉低十位。这通常写成

onlyHighBits = x & ~0x03FF

在这个操作(“and not”)之后,onlyHighBits 的低十位保证为零。这意味着如果这个数字现在等于区间的下限,那么它就在之前区间的某个地方。

这个技巧适用于区间的下限和上限以相同的二进制数字开头的所有情况,并且在某些时候下限只有零而上限只有一个。在您的示例中,它位于右起第十个位置。

关于c++ - 用于检查数字是否在特定范围内的位旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4573751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com