Преобразовать word в bool

stesl писал(а): ↑23 мар 2021, 10:37
Тип Word — это целочисленный беззнаковый тип данных, в два байта. Диапазон 0-65535. Используется везде, где оказывается нужным.

Не путайте Word с UInt (unsigned integer16), он не относится к целочисленным, так как не кодирует числовые значения и не совместим с математическими операциями.
Потому что:

Sergy6661 писал(а): ↑23 мар 2021, 12:54
Вот для упаковки-распаковки битовых переменных и используется в основном.

Но не в основном, а только для этого. Если конечно в конкретном ПЛК не срабатывает неявное преобразование, из-за которого кажется, что Word — это целое число.

Отправлено спустя 21 минуту 7 секунд:
Не, иначе объясню:
Word — это когда ты в 16 бит записал 16 булевых значений, каждый из которых что-то значит в смысле true/false. Например, при управлении сервоприводом или частотником.
Int16, UInt16 — это числа, отдельные биты не представляют интереса (хотя бывают редкие исключения).
Математические операции умеют работать с числами, то есть Add(), Sub(), Mul(), Div() работают с Int16/UInt16, а с Word работает подозрительно, подсвечивает типа «глянь, что за дрянь ты задумал?», но воспринимает как число 0-65535. Извините, правда, зачем вы складываете слово управления частотника с числом -85?
Зато сдвиговые операции и операции со словами типа ANDW(), ORW(), NOT(W), XORW() работают именно со словами и подозрительно с целыми числами.

Это разные типы данных, хотя все они 16 бит.

Do While Alien(0).Text = Alien(1).Text Or Alien(2).Text Or Alien(3).Text Or Alien(4).Text Or Alien(5).Text
     rand()
     Alien(0).Text = WordBank(Word)
Loop

Rand () выбирает случайное слово внутри массива и присваивает случайное слово переменной Word

1 ответ

Лучший ответ

Вы не можете так сравнивать строки. Вы должны повторно проверять Alien(0).Text для каждого Or, иначе он попытается оценить ваши строки как значения Boolean (True или False).

Вот почему вы получаете ошибку: строка (кроме "True" или "False") не может быть преобразована в Boolean, потому что, как компилятор узнает, как преобразовать, например "Bear" в True или False?

Кроме того, гораздо лучше использовать OrElse, поскольку он закорочен, что означает, что если одна проверка будет успешной, она выиграет » Не пытаюсь проверить остальные.

Do While Alien(0).Text = Alien(1).Text OrElse Alien(0).Text = Alien(2).Text OrElse Alien(0).Text = Alien(3).Text OrElse Alien(0).Text = Alien(4).Text OrElse Alien(0).Text = Alien(5).Text


3

Visual Vincent
4 Янв 2018 в 18:01

Meta on asking questions: You really should give some examples of how you tried to solve the problem. Shy of that, at least an example of the result you want such as what «bits» means to you. I tend to think of a collection of Word8 values as bits and so there is operation to be performed.

That said, lets pose and answer a series of related questions.

What are the bit operators in Haskell?

If you want bit level operations, instead of doing arithmetic tricks like x || 2^i you can use the functions from the Bits class:

Prelude> import Data.Bits
Prelude Data.Bits> :i Bits
class Eq a => Bits a where
  (.&.) :: a -> a -> a
  (.|.) :: a -> a -> a
  xor :: a -> a -> a
  complement :: a -> a
  shift :: a -> Int -> a
  rotate :: a -> Int -> a
  zeroBits :: a
  bit :: Int -> a
  setBit :: a -> Int -> a
  clearBit :: a -> Int -> a
  complementBit :: a -> Int -> a
  testBit :: a -> Int -> Bool
  bitSizeMaybe :: a -> Maybe Int
  bitSize :: a -> Int
  isSigned :: a -> Bool
  shiftL :: a -> Int -> a
  unsafeShiftL :: a -> Int -> a
  shiftR :: a -> Int -> a
  unsafeShiftR :: a -> Int -> a
  rotateL :: a -> Int -> a
  rotateR :: a -> Int -> a
  popCount :: a -> Int

And also the FiniteBits class:

class Bits b => FiniteBits b where
  finiteBitSize      :: b -> Int
  countLeadingZeros  :: b -> Int
  countTrailingZeros :: b -> Int

How can I convert Word8 to [Bool]?

This is simply testing each bit in the word, and b

toBits x = [testBit x i | i <- [0.. finiteBitSize x - 1]

How can I convert Word8 to some datatype I called Bit that I won’t show you?

After your first edit I now think you have data Bit = Zero | One but am unclear if that’s correct. It seems like homework and the advice given here should suffice to get the rest of the way either way.

Like this post? Please share to your friends:
  • Преобразовать word в access
  • Преобразователь pdf в excel скачать бесплатно
  • Преобразовать vsd в word онлайн
  • Преобразователь odt в word онлайн
  • Преобразовать vcf в word