zoukankan      html  css  js  c++  java
  • 异或运算、与运算、或运算 运用在 多项选择题

    背景

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

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

    例子

    例如:

    有一个多项选择题,

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

    A.东莞市

    B.广州市

    C.中山市

    D.珠海市

    E.茂名市

    F.深圳市

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

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

      FieldA FieldB FieldC FieldD FieldE FieldF  
      0 1 1 1 0 0  

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

    异或

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

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

       //城市枚举
        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

    其他选项以此类推。

  • 相关阅读:
    Realtime crowdsourcing
    maven 常用插件汇总
    fctix
    sencha extjs4 command tools sdk
    首次吃了一颗带奶糖味的消炎药,不知道管用不
    spring mvc3 example
    ubuntu ati driver DO NOT INSTALL recommand driver
    yet another js editor on windows support extjs
    how to use springsource tools suite maven3 on command
    ocr service
  • 原文地址:https://www.cnblogs.com/alunchen/p/6748528.html
Copyright © 2011-2022 走看看