bool type with two values: true or false.
TVM does not have booleans as a separate type. Instead, true is represented as the bit 1 and false as the bit 0. In the context of TVM’s signed 257-bit integers, this means that true corresponds to a decimal -1, while false corresponds to 0.
== or && produce values of type bool. Many standard library functions also return bool values:
Logical operators accept both int and bool
- Operator
!xsupports bothboolandint. - The condition of
ifand similar statements accepts bothboolandint, where it treats the latter astrueif the value is not equal to 0, and asfalseotherwise. - Logical operators
&&and||accept bothboolandint. For example,a && bevaluates totruewhen both operands aretrueor both operands are non-zero integers.
Logical and bitwise operators
Tolk has both bitwise& ^ | and logical && || operators that can be used for booleans and integers.
The main difference is that logical operators short-circuit: the right operand is evaluated only if required.
| Expression | Behavior |
|---|---|
condition & f() | f() is called always |
condition && f() | f() is called only if condition is true |
condition | f() | f() is called always |
condition || f() | f() is called only if condition is false |
(a > 0) && (a < 10), when replaced with bitwise &, consumes less gas.
Casting to an integer
Use theas operator to cast the bool to int. No runtime transformations take place: at the TVM level, the bool type is represented as an integer with a decimal value of either -1 or 0.
Serialization
A boolean is serialized as a single bit: 1 fortrue and 0 for false.