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

    其他选项以此类推。

  • 相关阅读:
    myeclipse8.6注册码
    hibernate用注解(annotation)配置sequence
    MyEclipse注释配置
    JAVA 单选样式编写
    .Net中的几种异步模式
    C#并发编程——并发编程技术
    《CLR via C#》之线程处理——任务调度器
    《CLR via C#》之线程处理——线程池与任务
    《CLR via C#》之线程处理——协作式取消和超时
    《CLR via C#》之线程处理——线程基础
  • 原文地址:https://www.cnblogs.com/alunchen/p/6748528.html
Copyright © 2011-2022 走看看