В Nimrod, каков синтаксис для побитовых операций?

Я просто открываю для себя Nimrod и имею основной вопрос (не могу найти ответ в документации).

Как вы используете побитовые операции? У меня есть следующий код, где х определяется как int:

if x and 1:

Это не компилируется:

Error: type mismatch: got (range 0..1(int)) but expected 'bool'

И если я попробую:

if and(x, 1)

я получил

Error: type mismatch: got (tuple[int, int])
but expected one of:  
system.and(x: int16, y: int16): int16
system.and(x: int64, y: int64): int64
system.and(x: int32, y: int32): int32
system.and(x: int, y: int): int
system.and(x: bool, y: bool): bool
system.and(x: int8, y: int8): int8

В чем подвох?

1 ответ

Решение

and делает поразрядно и; проблема скорее в том, что if ожидает bool, а не целое число. Если вы хотите сравнить C-like с 0, просто добавьте его:

>>> if 1:
...   echo("hello")
...
stdin(10, 4) Error: type mismatch: got (int literal(1)) but expected 'bool'
>>> if 1!=0:
...   echo("hello")
...
hello

Если вы хотите проверить последний бит, вы можете использовать testBit из модуля bitops:

import bitops
if testBit(x, 0):
  echo "Last bit is 1"
Другие вопросы по тегам