【发布时间】:2010-01-08 00:11:28
【问题描述】:
首先,我想知道这是否可能:假设我有一个 unsigned long 包含一些 abritrary unsigned shorts,它可能在数字中,也可能不在数字中。例如:
unsigned short int id1 = 3456,
id2 = 30998;
unsigned long long bitfld = id1|id2;
其他2个字段可以假设为0吗? OR 是正确的操作吗?之后,假设我将 bitfld 作为参数传递:
void dostuff (unsigned long long bf)
{
//pseudo code
if( the first field exists in bf)
get first field;
if( the second field exists in bf)
get second field;
//etc...
}
我想我必须轮询位域的前 16 位并检查它们,然后递归轮询它们,验证它们并在它们大于 0 时存储它们。但我不知道该怎么做,位shift 只向左或向右移动,因此,它只向右除或乘?
对不起。感谢大家的回答,但我最终使用了一种更简单、更有效的方法,一种内部结构。你看,我可以用一个字符串轻松地做到这一点,但我的目的是对代码的用户透明,可以这么说很容易编程。 我创建了一个内部结构来保存我的值,然后创建一个公共方法来创建和返回这种结构,因此它易于使用且解析速度更快(尽管它具有在堆栈中分配一个(尽管很小)结构的开销,它位域解决方案没有,但唉)。
谢谢大家的回答。
【问题讨论】:
-
运行测试不会花很长时间。
-
您是否有理由不能使用
unsigned int执行按位运算? -
你很早就失去了我。一个可能不是是数字的任意short?衣服?
-
nobugz, "这可能是也可能不是在这个数字"
标签: c++ c bit-manipulation parameter-passing bit-fields