gpt4 book ai didi

c# - 为什么使用标志+位掩码而不是一系列 bool 值?

转载 作者:IT王子 更新时间:2023-10-29 04:26:00 25 4
gpt4 key购买 nike

假设我有一个对象可能处于一个或多个真/假状态,我一直对为什么程序员经常使用标志+位掩码而不是仅仅使用几个 bool 值感到有点模糊。

它遍布 .NET 框架。不确定这是否是最佳示例,但 .NET 框架具有以下内容:

public enum AnchorStyles
{
None = 0,
Top = 1,
Bottom = 2,
Left = 4,
Right = 8
}

所以给定一个 anchor 样式,我们可以使用位掩码来确定选择了哪些状态。但是,您似乎可以使用 AnchorStyle 类/结构完成相同的事情,其中​​为每个可能的值定义 bool 属性,或者单个枚举值的数组。

当然,我提出这个问题的主要原因是我想知道我是否应该对自己的代码遵循类似的做法。

那么,为什么要使用这种方法?

  • 更少的内存消耗? (它似乎不像它会消耗少于 bool 的数组/结构)
  • 比结构或数组更好的堆栈/堆性能?
  • 更快的比较操作?更快地增加/减少值(value)?
  • 对编写它的开发人员更方便?

最佳答案

传统上这是一种减少内存使用的方法。所以,是的,它在 C# 中已经过时了 :-)

作为一种编程技术,它在今天的系统中可能已经过时了,你可以使用 bool 数组,但是......

比较存储为位掩码的值很快。使用 AND 和 OR 逻辑运算符并比较生成的 2 个整数。

它使用的内存要少得多。将所有 4 个示例值放在位掩码中将使用半个字节。使用 bool 数组,很可能会为数组对象使用几个字节,并为每个 bool 使用一个长字。如果您必须存储一百万个值,您就会明白为什么位掩码版本更优越。

它更易于管理,您只需处理单个整数值,而 bool 数组的存储方式则大不相同,例如数据库。

而且,由于内存布局,在各个方面都比数组快得多。它几乎与使用单个 32 位整数一样快。我们都知道,这对数据操作来说是最快的。

关于c# - 为什么使用标志+位掩码而不是一系列 bool 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1406554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com