简化位设置算法尝试
Simplifying a bit set algorithm attempt
尝试简化这个工作但冗长的代码,用于涉及位数组操作的赋值。到目前为止,我对 set 函数有什么(将数组中索引处的位设置为 1):
// set bit with given index to 1
void BitArray::Set (unsigned int index){
switch( index%8 )
{
case 7:
barray[index/8] = barray[index/8] | 1;
break;
case 6:
barray[index/8] = barray[index/8] | 2;
break;
case 5:
barray[index/8] = barray[index/8] | 4;
break;
case 4:
barray[index/8] = barray[index/8] | 8;
break;
case 3:
barray[index/8] = barray[index/8] | 16;
break;
case 2:
barray[index/8] = barray[index/8] | 32;
break;
case 1:
barray[index/8] = barray[index/8] | 64;
break;
case 0:
barray[index/8] = barray[index/8] | 128;
break;
default: cout << "Error. Index less than 0. Cannot set the bit.";
} // end of switch( index )*/
因此我将转到 char 数组中的一个元素,然后在那个元素上我将遍历保存并更改该索引的 8 位。
这是我简化 switch 语句的尝试:
int location = index / 8;
int position = index % 8;
mask = (1 << position);
barray[location] = barray[location] | Mask(index);
这不符合我的预期(如果我传入 2 作为要更改的索引,则将索引 5 处的位设置为“1”)
感谢任何意见
实际上你读取位的顺序不是C(或C++)读取位的顺序。您似乎是从左到右读取位,而对于 C“1”是“00000001”。
所以你应该这样修正你的陈述(也使用“|=”运算符):
barray[location] |= 1 << (7 - position);
(我忽略了你的功能 Mask(index)
因为你没有向我们描述它)
看来你需要的是定义int position = 7 - (index % 8);
.
尝试简化这个工作但冗长的代码,用于涉及位数组操作的赋值。到目前为止,我对 set 函数有什么(将数组中索引处的位设置为 1):
// set bit with given index to 1
void BitArray::Set (unsigned int index){
switch( index%8 )
{
case 7:
barray[index/8] = barray[index/8] | 1;
break;
case 6:
barray[index/8] = barray[index/8] | 2;
break;
case 5:
barray[index/8] = barray[index/8] | 4;
break;
case 4:
barray[index/8] = barray[index/8] | 8;
break;
case 3:
barray[index/8] = barray[index/8] | 16;
break;
case 2:
barray[index/8] = barray[index/8] | 32;
break;
case 1:
barray[index/8] = barray[index/8] | 64;
break;
case 0:
barray[index/8] = barray[index/8] | 128;
break;
default: cout << "Error. Index less than 0. Cannot set the bit.";
} // end of switch( index )*/
因此我将转到 char 数组中的一个元素,然后在那个元素上我将遍历保存并更改该索引的 8 位。
这是我简化 switch 语句的尝试:
int location = index / 8;
int position = index % 8;
mask = (1 << position);
barray[location] = barray[location] | Mask(index);
这不符合我的预期(如果我传入 2 作为要更改的索引,则将索引 5 处的位设置为“1”)
感谢任何意见
实际上你读取位的顺序不是C(或C++)读取位的顺序。您似乎是从左到右读取位,而对于 C“1”是“00000001”。 所以你应该这样修正你的陈述(也使用“|=”运算符):
barray[location] |= 1 << (7 - position);
(我忽略了你的功能 Mask(index)
因为你没有向我们描述它)
看来你需要的是定义int position = 7 - (index % 8);
.