# AND

### From QB64 Wiki

The logical **AND** numerical operator compares two values in respect of their bits. If both bits at a certain position in both values are set, then that bit position is set in the result.

*result*=*firstvalue*AND*secondvalue*

*Description:*

- AND compares the bits of the
*firstvalue*against the bits of the*secondvalue*, the result is stored in the*result*variable. - If both bits are on or binary 1 then the result is on or 1.
- All other conditions return 0 or the bit is off.
- AND is often used to see if a bit is on by comparing a value to an exponent of 2.
- Can turn off a bit by subtracting the bit on value from 255 and using that value to AND a byte value.

*A*and

*B*are operands, and

*T*and

*F*indicate that a bit is set or not set:

Operands Operations A B `NOT B``A`**AND**B`A OR B``A XOR B``A EQV B``A IMP B`T T F T T F T T T F T F T T F F F T F F T T F T F F T F F F T T

**Relational Operations return negative one (-1, all bits set) and zero (0, no bits set) for**

*true*and*false*, respectively.

*Example 1:*

101 AND 011 ----- 001

- The 101 bit pattern equals 5 and the 011 bit pattern equals 3, it returns the bit pattern 001 which equals 1. Only the Least Significant Bits(LSB) match. So decimal values 5 AND 3 = 1.

*Example 2:*

11111011 AND 11101111 ---------- 11101011

- Both bits have to be set for the resulting bit to be set. You can use the AND operator to get one byte of a two byte integer this way:

- firstbyte = twobyteint AND 255

- Since 255 is 11111111 in binary, it will represent the first byte completely when compared with AND.

- To find the second(HI) byte's decimal value of two byte INTEGERs use: secondbyte = twobyteint \ 256

*Example 3:* Finding the binary bits on in an INTEGER value.

DO
INPUT "Enter Integer value from -32768 to 32767 (Enter quits): ", INTvalue&
IF INTvalue& < -32768 OR INTvalue& > 32767 OR INTval& = 0 THEN EXIT DO
FOR exponent = 15 TO 0 STEP -1
IF (INTvalue& **AND** 2 ^ exponent) THEN PRINT "1"; ELSE PRINT "0";
NEXT
PRINT " "
LOOP UNTIL INTvalue& = 0 'zero entry quits

- Example output for 6055.

0001011110100111

*Note:*The value of 32767 sets 15 bits. -1 sets all 16 bits. Negative values will all have the highest bit set. Use LONG variables for input values to prevent overflow errors!

*See also:*

*Navigation:*