I'm support, not dev just so that's clear. At the workplace, there's a system of flags for users stored as a decimal integer, but represent bits. 0001 means that the first flag is raised therefore the DB stores 1 (person A) 0100 means the same for the third, and stores 4 (person B) 0111 , first three flags raised , so I get 7. (person C) This I understand, and it's not the problem. We have 50 or so flags and it makes things pretty easy. What I don't get is the query we use to find out who has what flag raised.. (example structure: id tinytext, bit bigint) If persons A,B, and C were in the database with the values 1,4,7 above, and I wanted to know who among them has the third flag raised, we query select id from persons where (bit & 4)=4; It returns B, C To get the first flag, select id from persons where (bit & 1)=1; It returns A, C It works like a charm, but I can't for the life of me wrap my head around how the query statement finds what I'm looking for. Can anyone explain to me what is going on in "where(bit & 4)=4" ? Thanks in advance