异或运算、与运算、或运算 运用在 多项选择题

本文介绍了一种利用位运算(特别是异或运算)优化数据库中多项选择题答案存储的方法,通过定义枚举类型并使用按位或运算进行组合,实现高效存储及查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

背景

当我们有个需求,有一个多项选择题的答案保存到数据库。

我们按照一般的思维,就是做多几个字段去存这些多项选这题。

 

例子

例如:

有一个多项选择题,

问题:你觉得广东哪些城市好玩?

A.东莞市

B.广州市

C.中山市

D.珠海市

E.茂名市

F.深圳市

按照一般思维,我们在数据库中设计6个字段,A/B/C/D/E/F,然后保存在数据库,谁选择了A,就把A对应的字段值存入数据库。

比如,我选择了B/C/D,表数据如下:

 FieldAFieldBFieldCFieldDFieldEFieldF 
 011100 

这样虽然清楚,但是浪费表资源的同时,当数据量多,造成查询数据低下的效果。

异或

下面,我们来介绍,如何用异或来存多项选择题。

我们首先定义选择题答案的枚举:

   //城市枚举
    public enum CityPlay
    {
        DongGuang = 1 << 0,//东莞
        GuangZhou = 1 << 1,//广州
        ZhongShan = 1 << 2,//中山
        ZhuHai = 1 << 3,//珠海
        MaoMing = 1 << 4,//茂名
        ShenZheng = 1 << 5//深圳
    }

在表中,我们只存一个字段(整型)

Field

如果,选择了B/C/D,做B/C/D的按位或运算,存入数据库:

CityPlay.GuangZhou | CityPlay.ZhongShan | CityPlay.ZhuHai

值等于14,存入数据库。

那我们怎么知道用户选择了哪几个题呢?

很简单,做或运算,

比如是否选择了B? 很简单,把值与B的枚举做一次按位与运算,等于0就是没选择,其余选择
CityPlay.GuangZhou & 14 == 0? N:Y

 

其他选项以此类推。

posted on 2017-04-22 17:49 alun-chen 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/alunchen/p/6748528.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值