c# - 存储六个单位的最小可能方式

标签 c# bit-shift

如果我有数字 1、2、3、4、5 和 6,我想以尽可能小的方式存储它们的一些组合,我该怎么做?

例如,我可能想要存储 1、4 和 5。或者可能是 2、4、5 和 6。或者甚至可能是所有六个数字。我将始终至少有一个号码需要存储。我想我可能已经看到这是通过移位完成的,但我不完全理解它是如何工作的。无论如何,我的最终目标是节省绝对最大的空间量,因为这些值需要存储在存储空间极小的硬件设备上。

编辑----------------------------------------

感谢大家提出的所有宝贵建议。我只是想澄清一下,我的应用程序中的实现不一定需要尽可能小,只是我理解并且对我身后的其他开发人员有意义的东西。最重要的是能够以尽可能小的方式表示这些值,因为我最终必须构建一个包含其他几个值的字节数组,并将其全部写入存储空间非常有限的设备。再次感谢大家的宝贵建议!

最佳答案

[Flags]
public enum NumberEnum : byte
{
    None = 0,
    One = 1,
    Two = 2,
    Three = 4,
    Four = 8,
    Five = 16,
    Six = 32
};

public string ExampleMethodWithNumberCombinationsAsAEnum(NumberEnum filterFlags = 0)
{
 if ((filterFlags & NumberEnum.One) == NumberEnum.One)
 {
    //Do something with one
 }

 if (((filterFlags & NumberEnum.One) == NumberEnum.One) && ((filterFlags & NumberEnum.Two) == NumberEnum.Two))
 {
    //Do something with one & two
 }
}

关于c# - 存储六个单位的最小可能方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14309865/

相关文章:

c# - JAVA垃圾收集副作用——阻塞?

c# - 最小起订量 HttpWebRequest 对象

c# - 我可以制作一个模板,或者在 C# 中生成一堆几乎相同的属性吗?

c# - 函数参数中的空指针与对象

javascript - 反转位 JavaScript

c# - 尝试使用错误的 key 解密时 AesCryptoServiceProvider 的行为

c - 将 unsigned int 传递给函数是否会导致其丢失位?

java - 如何从数字中检索位

c++ - 算术右移给出虚假结果?

java - 位移位和字节转换在 Java 和 C# 中给出不同的结果