C++ 简化位集算法的尝试

C++ 简化位集算法的尝试,c++,arrays,bit-manipulation,bit,bitmask,C++,Arrays,Bit Manipulation,Bit,Bitmask,对于涉及位数组操作的赋值,尝试简化此工作但冗长的代码。到目前为止,我对set函数的了解(将数组中索引处的位设置为1): //将给定索引的位设置为1 void BitArray::Set(无符号整数索引){ 交换机(索引%8) { 案例7: 巴里[指数/8]=巴里[指数/8]| 1; 打破 案例6: 巴里[指数/8]=巴里[指数/8]| 2; 打破 案例5: 巴里[指数/8]=巴里[指数/8]| 4; 打破 案例4: 巴里[指数/8]=巴里[指数/8]| 8; 打破 案例3: 巴里[指数/8]=巴

对于涉及位数组操作的赋值,尝试简化此工作但冗长的代码。到目前为止,我对set函数的了解(将数组中索引处的位设置为1):

//将给定索引的位设置为1
void BitArray::Set(无符号整数索引){
交换机(索引%8)
{
案例7:
巴里[指数/8]=巴里[指数/8]| 1;
打破
案例6:
巴里[指数/8]=巴里[指数/8]| 2;
打破
案例5:
巴里[指数/8]=巴里[指数/8]| 4;
打破
案例4:
巴里[指数/8]=巴里[指数/8]| 8;
打破
案例3:
巴里[指数/8]=巴里[指数/8]| 16;
打破
案例2:
巴里[指数/8]=巴里[指数/8]| 32;
打破
案例1:
巴里[指数/8]=巴里[指数/8]| 64;
打破
案例0:
巴里[指数/8]=巴里[指数/8]| 128;
打破

默认值:cout实际上,您读取位的顺序不是C(或C++)读取位的顺序。您似乎是从左到右读取位,而C的“1”是“00000001”。 因此,您应该这样修改语句(也使用“|=”运算符):


barray[location]|=1实际上,您读取位的顺序不是C(或C++)读取位的顺序。您似乎是从左到右读取位,而C的“1”是“00000001”。
因此,您应该这样修改语句(也使用“|=”运算符):


barray[location]|=1看起来您需要的是定义
int-position=7-(索引%8);
看起来您需要的是定义
int-position=7-(索引%8);

既然您已经颠倒了位顺序,只需颠倒位置的顺序(例如
7-position
)就是这样!谢谢,我现在记得在课堂上听到过这件事,我希望我能早点记住!既然你已经颠倒了位顺序,只需颠倒位置的顺序(例如
7-position
)就是这样!谢谢,我现在记得在课堂上听到过这件事,我希望我能早点记住!谢谢!是的,我忘了取出那个掩码函数并替换为我在方法中声明的那个,但本质上是一样的!是的,我忘了取出那个掩码函数并替换为我在方法中声明的那个,但本质上是一样的盟友
// 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 )*/
int location = index / 8;
int position = index % 8;

mask = (1 << position);
barray[location] = barray[location] | Mask(index);
barray[location] |= 1 << (7 - position);