0

我正在尝试使用 C++ 中的位运算来解决问题,但我真的被卡住了。请帮助我完成以下查询。

1) 是否可以创建变量的 A 和 B,它们在内存中正好占用 100000 位,并且像 A&B 这样的操作是有效的?

2) 有没有一种快速的方法来生成 B(100000bits),使其前 n 位为 0,最后 m 位为 0,其余为 1?(例如,如果 B 是 10 位,则为 0000011000 之类的数字)

4

1 回答 1

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.

于 2012-11-03T08:29:45.403 回答