# access bitwise AND operator?

Hi Folks,

does access have a bitwise AND operator?

eg:

1 AND 2 = 0 (001 AND 010 = 000)
1 AND 3 = 2 (001 AND 011 = 010)
7 AND 1 = 1 (111 AND 001 = 001)
5 AND 2 = 0 (101 AND 010 = 000)
4 AND 0 = 0 (100 AND 000 = 000)
etc.

on testing, access gives:

1 AND 2 = 1
1 AND 3 = 1
7 AND 1 = 1
5 AND 2 = 1
4 AND 0 = 0

which suggests that the arguments are treated as >0 = TRUE

cheers.

LVL 37
###### Who is Participating?

Commented:
to get the values of 2,3,6,7
yo must create a new field in the query and use
test: (([a]\[b]) Mod 2) and for it's criteria use 1

the sql would be

SELECT a, (([a]\[b]) Mod 2) AS test
FROM data
WHERE ((((([a]\[b]) Mod 2))=1));
0

Commented:
meverest,

Which version of Access are you using? In Access 97 and Access 2000, bitwise operations ARE supported. Perhaps also in previous versions, but I have not been able to test that.

Try this in the "debug" or "immediate" window:

Print 1 and 2
Print 1 and 3
Print 7 and 1
Print 5 and 2

Ture Magnusson
0

Author Commented:
it is access97 and i want to do it in a query (from SQL view)

does this make a difference?  i am not familiar with vb macro/scripts.

cheers.
0

Commented:
From Access help file:

The And operator also performs a bitwise comparison of identically positioned bits in two numeric expressions and sets the corresponding bit in result
according to the following table:

If bit in expression1 is      And bit in expression2 is      The result is
0      0      0
0      1      0
1      0      0
1      1      1
0

Author Commented:
thanks to all thus far.

all these points seem to suggest that access already does what i want, but for some unknown reason, many tests prove exactly the opposite.

take this test as an example:

i make a table 'data' that contains two columns 'a' and 'b', then i populate the table like this:

a b
1 2
2 2
3 2
4 2
5 2
6 2
7 2
8 2

and i create a new query:

select a from data where a AND b

i expect this output:

2, 3, 6, 7

but in fact i get:

1, 2, 3, 4, 5, 6, 7, 8

which suggests (as per previous comment) that access thinks that <= 0 is 'false' and that >= 1 is 'true'

regards.
0

Commented:
to set a bit use
the OR operator
to turn a bit off use AND NOT

example turn on the first bit use
me.Bitvalue=(me.bitvalue OR 2^0)
to turn it off use
me.Bitvalue=(me.bitvalue AND NOT 2^0)

to get the bit value you can use something like

me.chkbox=((Me.Bitvalue And 2^0) = 2^0)

0

Author Commented:
thanks blakeh1,

but i do not understand how i apply this technique to an (access) sql query?

please see my previous comment defining what i am trying to do - this is what i need.

regards.
0

Author Commented:
cool!

that works just fine,  thanks :)
0

Author Commented:
hmm, i jumped the gun a bit there...

it works only for that specific data set, but not as a general rule for (a AND b)

dang!

if you can't offer any more suggestions, i guess that i will need to post a new question :(

cheers.
0

Commented:
I had this same problem and solved at with a function:

' Returns bitwise a and b
Public Function fnAND(a As Byte, b As Byte) As Byte

fnAND = a And b

End Function
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.