位掩码与位“访问数组”是否具有可比性?

时间:2018-08-08 16:10:03

标签: c bit-manipulation terminology masking bitmask

对于我所见过的所有有关位掩码的定义,它们都只是直接研究如何进行位掩码,按位使用等,而没有解释任何用例。目的是为了更新要保留的所有位以及要清除的所有位,以按位“访问数组”?

1 个答案:

答案 0 :(得分:0)

所以主要有3(或4)种用途。

就像您说的那样,

是将单词用作一组true / false标志的位置,其中每个标志只是以对称方式进行索引。我在这里使用“单词”作为您在单个操作中访问的离散内存。因此,一个字节保存8位值,而“ long long”保存64位。稍加努力,就可以将单词数组用作更多打包标志的数组。

第二个是您正在对值进行一些操作的地方,但是仍然认为单词保留一个值。有很多技巧,例如设置或清除低位以确保对齐,或清除高位以获取模数,移位以除以2的幂或乘以

第三个用途是要将多个较小范围的值打包到一个单词中。每个值在上下文中都有特定的含义。这可能是因为您需要与将其定义为协议的设备进行通信,或者是因为您需要创建太多的对象,以致每个对象中节省的空间超过了代码大小和代码速度成本的增加(尽管如果对象较大,则可能与高速缓存未命中次数增加(导致速度变慢)形成对比。

作为区别,第四种情况是这些字段是不同的1位标志,在代码的上下文中具有特定含义。数据对象倾向于收集许多这样的标志,并且有时将它们作为位存储在单个位置中比为每个标志使用单独的字节更方便。通常,测试特定的固定索引位或固定屏蔽位在代码大小或速度上不会比测试整个字节贵,尽管写入可能会更复杂。存储空间的节省是显而易见的,因此,在面对在结构中创建多个标志或编写函数时,程序员通常默认情况下会声明位掩码的枚举。