我正在尝试使用C ++中的位操作来解决问题,但我真的被卡住了。请帮我解决以下问题。
1)是否有可能创建变量A和B,它在内存中只有100000位,并且A& B之类的操作有效?
2)是否有快速生成B(100000bits)的方法,使其前n位为0,后m位为0,其余为1? (例如,如果B是10位,那么数字如0000011000)
答案 0 :(得分:3)
在答案1中,当然,这就是课程的意义所在。只需创建一个包含100,000位(约12.5K)的类并覆盖operator&
方法(二进制方法,而不是地址操作符)。
一个好的开始就是(比如我们有两个整数拿着位掩码):
BigBits BigBits::operator &(const BigBits &that) const {
BigBits bb(*this);
bb.array[0] = this->array[0] & that.array[0];
bb.array[1] = this->array[1] & that.array[1];
return bb;
}
这是未经测试但应该给你基本的想法。为了测试它,我必须编写相当多的代码,包括构造函数,析构函数,赋值等等,当它真的应该你的任务时: - )
在回答两个问题时,这也很容易。唯一的技巧位是两个边沿字节,所有内部字节只能设置为全1位。
为了设置边沿字节,您使用一个除法位和一个字节中的位数模数然后使用位掩码来设置它们。位掩码为0x80
,0xc0
,0xe0
,0xf0
,0xf8
等等,每个后续值再添加1位。
然后,您将以各种形式使用bitmask[bitpos % 8]
来设置边字节,其数组索引为bitpos / 8
。