如何在单个值中表示 4 种布尔可能性

我想在单个值中存储4个布尔可能性。例如,我想要一个值来告诉一个人是否是:

IsSingle
IsGraduate
IsMale
IsLookingForPartner

因此,将它们存储在一个字节中是好的,该字节可以分配4位,每个参数一个。如果该位设置为 1,则该布尔参数为 true。所以我可以做位移位操作来找到所有的东西。如果 byte 的值为 111,则前三个参数为真。这是一个好方法吗?有没有更好的方法来实现这一点?

我需要将此值存储为数据库中的单个参数。


答案 1

位标志。

public static final int IsSingle = 1 << 0;
public static final int IsGraduate = 1 << 1;
public static final int IsMale = 1 << 2;
public static final int IsLookingForPartner = 1 << 3;

...

if ((Value & IsSingle) != 0) {
}

if ((Value & IsGraduate) != 0) {
}

// Set "Single"
Value |= IsSingle;

// Remove "Graduate"
Value &= ~IsGraduate;

答案 2

确实可以执行此操作,但不建议这样做。

如果您想在数据库中查找所有单身学生,该怎么办?还是男性?虽然您节省的空间很小,但您放弃了为数据编制索引以加快搜索速度的可能性,不仅如此,而且要找到具有取决于这些属性的任何查询条件的任何数据,您需要对所有记录执行位移位操作(或检查多个整数值),这最终会变得非常慢。

在我看来,增加的复杂性并没有真正产生太多的好处,数据库可以处理4个单独的字段,并且有充分的理由这样做(例如,轻松查询这些字段上的数据)。