200分,接分快乐mysql> select 0&3,1&3,2&3,3&3,4&3,5&3,6&3,7&3,8&3,9&3;
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
| 0&3 | 1&3 | 2&3 | 3&3 | 4&3 | 5&3 | 6&3 | 7&3 | 8&3 | 9&3 |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|   0 |   1 |   2 |   3 |   0 |   1 |   2 |   3 |   0 |   1 |
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
和mod运算一样哈

解决方案 »

  1.   

    `visible` set('user','memb','agent','adm') NOT NULL default 'user',怎么跟3做位运算呢?
      

  2.   

    `visible` set('user','memb','agent','adm') ,字符型字段怎么可以做位运算呢
      

  3.   

    是呀,怎么能跟3做位运算呢?一个SET对象的大小由不同的集合成员的数量决定。如果集合大小是N,对象占据(N+7)/8个字节,四舍
    五入为1,2,3,4或8 个字节。一个SET最多能有64个成员。`visible` set('user','memb','agent','adm') NOT NULL default 'user',  值     对应二进制
    'user'   00000001
    'memb'   00000010
    'agent'  00000100
    'adm'    00001000  3      00000011于是  WHERE `visible` & 3 将筛选出
    visible 为'user'或'memb'的记录一直都用长整型存储权限位,还真没注意set类型可以多出一倍
      

  4.   

    值     对应二进制
    'user'   00000001
    'memb'   00000010
    'agent'  00000100
    'adm'    00001000
    这个怎么算出来的啊,
      

  5.   

    一个 SET 最大可以有 64 个不同的成员。 从 3.23.51 开始,当表被创建时,SET 值尾部的空格将被自动地删除。 MySQL 以数字值存储 SET 值,以被存储值的低阶比特位(bit)对应于第一个集合成员。如果在一个数字语境中检索一个 SET 值,检索的值把比特位设置为对应组成列值的集合成员。例如,你可以使用下面所示的示例从一个 SET 列中检索出一个数字: mysql> SELECT set_col+0 FROM tbl_name;如果将一个数字存储到一个 SET 列中,被设置的数字的二进制表示法的比特位决定列值中的集合成员。假设一个列被定义为 SET("a","b","c","d")。那么它的成员有下面所示的比特值: SET 成员  十进制值  二进制值  
    a  1  0001  
    b  2  0010  
    c  4  0100  
    d  8  1000  如果将值 9(二进制的 1001) 赋给这个列,那么 SET 值的第一个和第四个成员 "a" 和 "d" 被选择,结果值为 "a,d"。