gpt4 book ai didi

c# - 在循环位字段中设置位范围

转载 作者:行者123 更新时间:2023-11-30 21:07:52 24 4
gpt4 key购买 nike

我有一个由 64 位组成的位域:

long bitfield = 0;

我可以如下设置给定索引的位:

void Set(long index)
{
bitfield |= 1L << (int)(index % 64);
}

即如果索引为 0、64、128,... 则设置位 0,如果索引为 1、65、129,... 则设置位 1,依此类推。

问题:给定一个索引和一个计数(或下限和上限索引),如何在不使用循环的情况下为该范围内的所有索引设置位?

最佳答案

long SetRangeMask(int lower, int upper)     // 3..7
{
if (! (lower <= upper)) throw new ArgumentException("...");

int size = upper - lower + 1; // 7 - 3 + 1 = 5
if (size >= 64) return -1;
long mask = (1 << size) - 1; // #00100000 - 1 = #000011111
return mask << lower | mask >> -lower; // #00011111 << 3 = #011111000
}

关于c# - 在循环位字段中设置位范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10036834/

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