Главная » Haskell » Модуль Bits

0

описывает класс (и несколько экземпляров для него), предоставляющий интерфейс для применения битовых операций для нумералов. Применение модуля:

import Data.Bits

В этом модуле описывается единственный  класс, чьё определение выглядит следующим образом.

Класс:  Bits

Описание: интерфейс к значениям, над которыми имеют смысл побитовые операции.

Определение:

class Num  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 bit                     ::  Int ->  a setBit               :: a ->  Int  ->  a clearBit           ::  a ->  Int ->  a complementBit  :: a  ->  Int ->  a

testBit      :: a ->  Int ->  Bool bitSize             ::  a ->  Int

isSigned          :: a  ->  Bool shiftL               ::  a ->  Int ->  a shiftR            :: a  ->  Int ->  a rotateL             :: a ->  Int  ->  a rotateR             ::  a ->  Int ->  a

Считается, что биты нумеруются с нулевого бита, причём нулевой бит является младшим. Для данного класса в рассматриваемом  модуле определены экземпляры типов Int и Integer. Остальные экземпляры определяются в модулях Int (пакет Data, см. раздел 8.14.) и Word (см. раздел 8.34.).

Метод  (.&.)  определяет побитовую операцию «И».   Соответственно, метод (.|.)  определяет побитовую операцию  «ИЛИ».  Метод xor  определяет побитовую операцию «Исключающее ИЛИ».

Метод complement возвращает значение, в котором все биты обращены (0 в 1 и наоборот), нежели во входном аргументе. Метод shift сдвигает аргумент влево на заданное количество позиций. Правый сдвиг для чисел со знаком достигается при помощи этого же метода, применённого к числу с обратным знаком. Метод rotate циклически сдвигает влево свой аргумент на заданное количество позиций. Правый циклический сдвиг осуществляется так же, как и для метода shift. Для неограниченных типов (например, Integer) циклический сдвиг эквивалентен простому сдвигу.

Метод bit возвращает значение с установленным i-ым битом (i задаётся в качестве аргумента). Два метода setBit и clearBit устанавливают и очищают заданный бит в заданном числе  соответственно. Метод complementBit  обращает заданный бит в заданном числе. Для трёх последних методов можно предусмотреть определения по умолчанию:

setBit x  i = x  .|. bit i

clearBit x  i = x  .&. complement  (bit i) complementBit  x  i = x  ‘xor‘ bit i

Метод textBit возвращает значение True, если заданный бит в заданном чис-

ле установлен (равен 1). Метод bitSize возвращает количество бит, которое занимает входное значение. Само значение не используется в методе. Для значений неопределённого размера (например, тип Integer) метод возвращает неопреде-

лённое же значение (?). Метод isSigned возвращает True, если входной аргумент

является числом со знаком, и False в противном случае.

Наконец, группа  методов shiftL,  shiftR,  rotateL, rotateR  осуществляют сдвиг или циклический сдвиг влево или вправо соответственно на заданное количество позиций. Аргументы всех этих функций должны быть неотрицательными.

8.3.         Модуль Bool

В модуле Bool дублируются описания типа Bool (булевские значения истинности) и функции для их обработки. Данный модуль создан в экспериментальном порядке в целях постепенной разгрузки стандартного модуля Prelude. Все определённые в модуле Bool программные сущности определены и в модуле Prelude. Использование:

import  Data.Bool

Соответственно, в рассматриваемый модуль вынесены определения: алгебраического типа данных Bool  (см. стр. 108), операции (&&)  (логическое «И» — см. раздел 6.4.), операции (||) (логическое «ИЛИ» — см. раздел 6.4.), операции not (логическое  отрицание  — см. стр. 147) и синонима otherwise (см. стр. 150),

который является константной функцией, возвращающей значение True для использования в выражениях охраны.

Также в модуле Bool определены экземпляры типа Bool для следующих классов: Bounded, Data, Enum,  Eq, Ix,  NFData, Ord,  Random,  Read, Show,  Storable, Typeable, IArray, MArray.

Источник: Душкин Р. В., Справочник по языку Haskell. М.: ДМК Пресс, 2008. 544 с., ил.

По теме:

  • Комментарии