#### Revision [17784]

This is an old revision of KeyPgOpAnd made by FxMwikki on 2015-09-12 08:08:53.

### Operator AND (Conjunction)

Returns the bitwise-and (conjunction) of two numeric values

**Syntax:**

KeyPgDeclare declare KeyPgOperator operator

**And**( KeyPgByref byref*lhs*KeyPgAs as*T1*, KeyPgByref byref*rhs*KeyPgAs as*T2*) KeyPgAs as*Ret***Usage:**

`
`

*result*=

*lhs*

**And**

*rhs*

**Parameters:**

*lhs*
The left-hand side expression.

*T1*
Any numeric or boolean type.

*rhs*
The right-hand side expression.

*T2*
Any numeric or boolean type.

*Ret*
A numeric or boolean type (varies with

`and`*T1*`).`*T2***Return Value:**

Returns the bitwise-and (conjunction) of the two operands.

**Description:**

This operator returns the bitwise-and of its operands, a logical operation that results in a value with bits set depending on the bits of the operands (for conversion of a boolean to an integer, false or true boolean value becomes 0 or -1 integer value).

The truth table below demonstrates all combinations of a boolean-and operation:

Lhs Bit | Rhs Bit | Result |

0 | 0 | 0 |

1 | 0 | 0 |

0 | 1 | 0 |

1 | 1 | 1 |

No short-circuiting is performed - both expressions are always evaluated.

The return type depends on the types of values passed.

The return type depends on the types of values passed.

`KeyPgByte Byte`,`KeyPgUbyte Ubyte`and floating-point type values are first converted to`KeyPgInteger Integer`. If the left and right-hand side types differ only in signedness, then the return type is the same as the left-hand side type (`), otherwise, the larger of the two types is returned. Only if the left and right-hand side types are both`*T1*`KeyPgBoolean Boolean`, the return type is also`KeyPgBoolean Boolean`.
This operator can be overloaded for user-defined types.

**Examples:**

' Using the AND operator on two numeric values

Dim As UByte numeric_value1, numeric_value2

numeric_value1 = 15 '00001111

numeric_value2 = 30 '00011110

'Result = 14 = 00001110

Print numeric_value1 And numeric_value2

Sleep

Dim As UByte numeric_value1, numeric_value2

numeric_value1 = 15 '00001111

numeric_value2 = 30 '00011110

'Result = 14 = 00001110

Print numeric_value1 And numeric_value2

Sleep

' Using the AND operator on two conditional expressions

Dim As UByte numeric_value1, numeric_value2

numeric_value1 = 15

numeric_value2 = 25

If numeric_value1 > 10 And numeric_value1 < 20 Then Print "Numeric_Value1 is between 10 and 20"

If numeric_value2 > 10 And numeric_value2 < 20 Then Print "Numeric_Value2 is between 10 and 20"

Sleep

' This will output "Numeric_Value1 is between 10 and 20" because

' both conditions of the IF statement is true

' It will not output the result of the second IF statement because the first

' condition is true and the second is false.

Dim As UByte numeric_value1, numeric_value2

numeric_value1 = 15

numeric_value2 = 25

If numeric_value1 > 10 And numeric_value1 < 20 Then Print "Numeric_Value1 is between 10 and 20"

If numeric_value2 > 10 And numeric_value2 < 20 Then Print "Numeric_Value2 is between 10 and 20"

Sleep

' This will output "Numeric_Value1 is between 10 and 20" because

' both conditions of the IF statement is true

' It will not output the result of the second IF statement because the first

' condition is true and the second is false.

**Dialect Differences:**

- In the
*CompilerOptlang -lang qb*dialect, this operator cannot be overloaded.

**Differences from QB:**

- None

**See also:**

Back to Logical Operators

Back to Operators