{{fbdoc item="title" value="Operator AND (Conjunction)"}}----
Returns the bitwise-and (conjunction) of two numeric values

{{fbdoc item="syntax"}}##
	[[KeyPgDeclare|declare]] [[KeyPgOperator|operator]] **And** ( [[KeyPgByref|byref]] //lhs// [[KeyPgAs|as]] //T1//, [[KeyPgByref|byref]] //rhs// [[KeyPgAs|as]] //T2// ) [[KeyPgAs|as]] //Ret//
##
{{fbdoc item="usage"}}##
	//result// = //lhs// **And** //rhs//
##
{{fbdoc item="param"}}
	##//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 ##//T1//## and ##//T2//##).

{{fbdoc item="ret"}}
	Returns the bitwise-and (conjunction) of the two operands.

{{fbdoc item="desc"}}
	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:
	
	{{table columns="3" cellpadding="2" cells="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. ##[[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 (##//T1//##), otherwise, the larger of the two types is returned. Only if the left and right-hand side types are both ##[[KeyPgBoolean|Boolean]]##, the return type is also ##[[KeyPgBoolean|Boolean]]##.
	
	This operator can be overloaded for user-defined types.

{{fbdoc item="ex"}}
{{fbdoc item="filename" value="examples/manual/operator/and-bitwise.bas"}}%%(freebasic)
' 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
%%

{{fbdoc item="filename" value="examples/manual/operator/and-logical.bas"}}%%(freebasic)
' 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.
%%

{{fbdoc item="lang"}}
	- In the //[[CompilerOptlang|-lang qb]]// dialect, this operator cannot be overloaded.

{{fbdoc item="diff"}}
	- None

{{fbdoc item="see"}}
	- ##[[KeyPgOpAndAlso|AndAlso]]##
	- [[TblTruth|Operator Truth Tables]]

{{fbdoc item="back" value="CatPgOpLogical|Logical Operators"}}{{fbdoc item="back" value="CatPgOperators|Operators"}}