## Operators

The following table lists the precedence and associativity of all operators. Operators are listed top to bottom, in ascending precedence. Operators in the same box group left to right. Operators are binary, unless the syntax is provided.

Operator | Description | Remarks |
---|---|---|

`**` | Power | ^{1} |

`+x` `-x` `!x` | Positive Negative Negation | |

`*` `/` `%` | Multiplication Division Remainder | |

`+` `-` | Addition Subtraction | |

`<<` `>>` | Left shift Right shift | ^{2} |

`&` | Bitwise AND | |

`|` | Bitwise OR | |

`^` | Bitwise XOR | |

`>=` `>` `<=` `<` | Greater or equal Greater Lower or equal Lower | ^{3} |

`!=` `==` | Not Equal Equal | |

`&&` | Boolean AND | |

`||` | Boolean OR | |

`if c then x else y fi` | Conditional expression |

^{1}

The exponent must be a compile-time constant of type `u32`

^{2}

The right operand must be a compile time constant of type `u32`

^{3}

Both operands are asserted to be strictly lower than the biggest power of 2 lower than `p/2`

, unless one of them can be determined to be a compile-time constant