三个布尔值保存在一个tinyint中

Jos*_*eph 0 type-conversion

可能是一个简单的问题,但我似乎受到程序员的阻碍.:)

我有三个布尔值:A,B和C.我想将状态组合保存为无符号tinyint(最大255)到数据库中,并能够从保存的整数中导出状态.即使组合数量有限,我也希望避免将每个状态组合硬编码为特定值(如果A = true且B = true,则值为1).

我试图给变量分配值(A = 1,B = 2,C = 3),然后加入,但我不能区分A和B是真的,即只有C为真.

我很难过,但很确定这是可能的.谢谢

Pre*_*gha 5

我认为二进制数学.选择2的幂(1,2,4,8蚀刻)的位置,然后您可以使用'按位和'运算符&来确定值.假设A = 1,B = 2,C = 4

00000111 => AB和C => 7

00000101 => A和C => 5

00000100 => C => 4

然后确定它们:

if( val  & 4 ) // same as if (C)
if( val  & 2 ) // same as if (B)
if( val  & 1 ) // same as if (A)

if((val  & 4) && (val & 2)  ) // same as if (C and B)
Run Code Online (Sandbox Code Playgroud)

不需要状态表.

编辑:反映注释如果tinyint的最大值为255 =>你有8位可以使用,并且可以在那里存储8个布尔值