【发布时间】:2010-10-15 20:33:29
【问题描述】:
我正在用 C# 编写一段时间要求严格的代码,它要求我将定义包含范围的两个无符号整数转换为位字段。例如:
uint x1 = 3;
uint x2 = 9;
//defines the range [3-9]
// 98 7654 3
//must be converted to: 0000 0011 1111 1000
以相反的顺序可视化位可能会有所帮助
这个范围的最大值是在运行时给出的一个参数,我们称之为max_val。因此,位域变量应该定义为一个大小等于max_val/32的UInt32数组:
UInt32 MAX_DIV_32 = max_val / 32;
UInt32[] bitArray = new UInt32[MAX_DIV_32];
给定由变量x1 和x2 定义的范围,执行此转换的最快方法是什么?
【问题讨论】:
-
大多数情况下 max_val >= 32 吗?否则使用数组是没有意义的。如果是,那么我假设您希望能够说我需要将 200 位设置为 1,并在右侧将 100 位的填充设置为 0。
-
如果你的 max_val 不能被 32 整除,那么你的 bitArray 将会丢失一些位。
-
塞缪尔——不知道你在说什么。吉姆 - 是的,我知道,这很好。
-
模组消失了……你必须进行基准测试。我怀疑表查找会显着提高任何速度。
-
看起来很漂亮。而且我刚刚发现我提供的用于查找表的代码无论如何都是错误的。感谢您的精彩回答!
标签: c# bit-manipulation bitarray