gpt4 book ai didi

c# - Bit twiddling : From ulong, 获取表示哪些字节非零的位掩码

转载 作者:太空宇宙 更新时间:2023-11-03 22:32:10 27 4
gpt4 key购买 nike

假设我们有一个 8 字节的 ulong。对于每个字节,我们想知道它是零还是非零。期望的结果是一个字节,其 8 位表示原始 8 个字节的“非零”。

是否有这个操作或一组操作的名称?

我们如何才能非常有效地实现这一目标?理想的解决方案是无分支的。

作为替代要求,一个有用的答案是第一个非零字节的位置。例如。如果第一个非零字节是第三个字节,则答案为 2(从 0 开始的索引)。我意识到这可以通过计算初始要求答案的前导零来解决,但也许这会允许一个捷径。

最佳答案

这可能有帮助 -

    private void Evaluate(ulong n)
{
ulong f = 255;
int r = 0, p = -1;
for (int i = 0; i < 8; i++)
{
r >>= 1;
var t = n & f;
if (t > 0)
{
r += 128;
if (p < 0)
p = i;
}
f <<= 8;
}
Console.WriteLine($"Resulting byte: {r}");
Console.WriteLine($"Position: {p}");
}

我所做的是将输入的 8 字节数字的每个字节与 255(1111 1111) 按位与运算。如果结果是 1,我将结果右移一位并加上 128(1000 000)。

对于我初始化的位置 p = -1 以防数字为零。否则,分配 `> 0' 的第一个索引。

有很多可能的优化,比如将输入数字与零进行比较,如果为真,则简单地为结果返回 0,为位置返回 -1。

关于c# - Bit twiddling : From ulong, 获取表示哪些字节非零的位掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56973519/

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