# Logical functions

The logical functions perform bit operations.

The logical functions are in the Logical category of the expression editor. Square brackets
indicate an argument is optional. The examples show the function as
it appears in a Derivation field in the Transformer
stage.

- BitAnd
- Returns the bitwise AND of the two integer arguments.
**Input**: number1 (uint64), number2 (uint64)**Output**: number (uint64)**Examples**. If mylink.mynumber1 contains the number 352 and mylink.mynumber2 contains the number 400, then the following two functions are equivalent, and return the value 256:`BitAnd(352,400) BitAnd(mylink.mynumber1,mylink.mynumber2)`

- BitCompress
- Returns the integer made from the string argument, which contains
a binary representation of "1"s and "0"s.
**Input**: string**Output**: number (uint64)**Examples**. If mylink.mynumber1 contains the string "0101100000", then the following two functions are equivalent, and return the number 352.`BitExpand("0101100000") BitExpand(mylink.mynumber)`

- BitExpand
- Returns a string containing the binary representation in "1"s
and "0"s of the given integer.
**Input**: number (uint64)**Output**: string**Examples**. If mylink.mynumber1 contains the number 352, then the following two functions are equivalent, and return the string "0101100000".`BitExpand(352) BitExpand(mylink.mynumber)`

- BitOr
- Returns the bitwise OR of the two integer arguments.
**Input**: number1 (uint64), number2 (uint64)**Output**: number (uint64)**Examples**. If mylink.mynumber1 contains the number 352 and mylink.mynumber2 contains the number 400, then the following two functions are equivalent, and return the value 496:`BitOr(352,400) BitOr(mylink.mynumber1,mylink.mynumber2)`

- BitXOr
- Returns the bitwise Exclusive OR of the two integer arguments.
**Input**: number1 (uint64), number2 (uint64)**Output**: number (uint64)**Examples**. If mylink.mynumber1 contains the number 352 and mylink.mynumber2 contains the number 400, then the following two functions are equivalent, and return the value 240:`BitXOr(352,400) BitXOr(mylink.mynumber1,mylink.mynumber2)`

- Not
- Returns the complement of the logical value of an expression.
If the value of expression is true, the Not function returns a value
of false (0). If the value of expression is false, the NOT function
returns a value of true (1). A numeric expression that evaluates to
0 is a logical value of false. A numeric expression that evaluates
to anything else, other than the null value, is a logical true. An
empty string is logically false. All other string expressions, including
strings that include an empty string, spaces, or the number 0 and
spaces, are logically true.
**Input**: expression**Output**: complement (int8)**Examples**. If mylink.myexpression contains the expression 5–5, then the following two functions are equivalent, and return the value 1:

If mylink.myexpression contains the expression 5+5, then the following two functions are equivalent, and return the value 0:`Not(5-5) Not(mylink.myexpression)`

`Not(5+5) Not(mylink.myexpression)`

- SetBit
- Returns an integer with specific bits set to a specific state,
where
*origfield*is the input value to perform the action on,*bitlist*is a string containing a list of comma-separated bit numbers to set the state of, and*bitstate*is either 1 or 0, indicating which state to set those bits.**Input**: origfield (uint64),bitlist (string),bitstate (uint8)**Output**: number (uint64)**Examples**. If mylink.origfield contains the number 352, mylink.bitlist contains the list "2,4,8", and mylink.bitstate contains the value 1, then the following two functions are equivalent, and return the value 494:`SetBit(356,"2,4,8",1) SetBit(mylink.origfield,mylink.bitlist,mylink.bitstate)`