# Logical Operators

The following table lists the logical operators of the Fvec classes and generic syntax. The logical operators for F32vec1 classes use only the lower 32 bits.

Fvec Logical Operators Return Value Mapping

Bitwise Operation | Operators | Generic Syntax
--- | --- | ---
`AND` | `& &=` | `R = A & B; R &= A;`
`OR` | `| |=` | `R = A | B; R |= A;`
`XOR` | `^ ^=` | `R = A ^ B; R ^= A;`
`andnot` | `andnot` | `R = andnot(A);`

The following table lists standard logical operators syntax and corresponding intrinsics. Note that there is no corresponding scalar intrinsic for the F32vec1 classes, which accesses the lower 32 bits of the packed vector intrinsics.

Logical Operations for Fvec Classes

Operation | Returns | Example Syntax Usage | Intrinsic
--- | --- | --- | ---
`AND` | 4 floats | `F32vec4 & = F32vec4 A & F32vec4 B;` `F32vec4 & &= F32vec4 A;` | _mm_and_ps
| 2 doubles | `F64vec2 R = F64vec2 A & F64vec2 B;` `F64vec2 R &= F64vec2 A;` | _mm_and_pd
| 1 float | `F32vec1 R = F32vec1 A & F32vec1 B;` `F32vec1 R &= F32vec1 A;` | _mm_and_ps
`OR` | 4 floats | `F32vec4 R = F32vec4 A | F32vec4 B;` `F32vec4 R |= F32vec4 A;` | _mm_or_ps
| 2 doubles | `F64vec2 R = F64vec2 A | F64vec2 B;` `F64vec2 R |= F64vec2 A;` | _mm_or_pd
| 1 float | `F32vec1 R = F32vec1 A | F32vec1 B;` `F32vec1 R |= F32vec1 A;` | _mm_or_ps
`XOR` | 4 floats | `F32vec4 R = F32vec4 A ^ F32vec4 B;` `F32vec4 R ^= F32vec4 A;` | _mm_xor_ps
| 2 doubles | `F64vec2 R = F64vec2 A ^ F64vec2 B;` `F64vec2 R ^= F64vec2 A;` | _mm_xor_pd
| 1 float | `F32vec1 R = F32vec1 A ^ F32vec1 B;` `F32vec1 R ^= F32vec1 A;` | _mm_xor_ps
`ANDNOT` | 2 doubles | `F64vec2 R = andnot(F64vec2 A,` `F64vec2 B);` | _mm_andnot_pd

Parent topic: Floating-point Vector Classes