Data.Bits

Data.Bits

Data.Bits 모듈은 부호 있는(signed) 정수와 부호 없는(unsigned) 정수에 대한 비트 단위 연산을 정의해요.

출처: Haskell 2010 언어 리포트

본문

class Num a => Bits a where

Bits 클래스는 정수 타입(integral types)에 대한 비트 단위 연산을 정의해요. 비트는 0부터 번호가 매겨지고, 비트 0이 가장 낮은 자리의 비트(least significant bit)예요.

최소 완전 정의(Minimal complete definition): .&., .|., xor, complement, (shift 또는 (shiftLshiftR)), (rotate 또는 (rotateLrotateR)), bitSize 그리고 isSigned.

메서드 (Methods)

(.&.) :: a -> a -> a

비트 단위 “and”예요.

(.|.) :: a -> a -> a

비트 단위 “or”예요.

xor :: a -> a -> a

비트 단위 “xor”예요.

complement :: a -> a

인자의 모든 비트를 뒤집어요.

shift :: a -> Int -> a

shift x ii가 양수이면 x를 왼쪽으로 i 비트 시프트하고, 그렇지 않으면 오른쪽으로 -i 비트 시프트해요. 오른쪽 시프트는 부호 있는 숫자 타입에 대해 부호 확장(sign extension)을 수행해요. 즉, x가 음수이면 상위 비트를 1로 채우고, 그렇지 않으면 0으로 채워요. 인스턴스는 해당 타입에 더 편리한 쪽에 따라 통합된 shift 또는 shiftLshiftR 중 하나를 정의할 수 있어요.

rotate :: a -> Int -> a

rotate x ii가 양수이면 x를 왼쪽으로 i 비트 회전하고, 그렇지 않으면 오른쪽으로 -i 비트 회전해요. Integer처럼 경계가 없는 타입에서 rotateshift와 동등해요. 인스턴스는 해당 타입에 더 편리한 쪽에 따라 통합된 rotate 또는 rotateLrotateR 중 하나를 정의할 수 있어요.

bit :: Int -> a

bit ii번째 비트만 1이고 나머지 비트는 모두 0인 값이에요.

setBit :: a -> Int -> a

x setBit ix .|. bit i와 같아요.

clearBit :: a -> Int -> a

x clearBit ix .&. complement (bit i)와 같아요.

complementBit :: a -> Int -> a

x complementBit ix xor bit i와 같아요.

testBit :: a -> Int -> Bool

인자의 n번째 비트가 1이면 True를 돌려줘요.

bitSize :: a -> Int

인자의 타입에 있는 비트 수를 돌려줘요. 인자의 실제 값은 무시돼요. bitSize 함수는 Integer처럼 고정된 비트 크기가 없는 타입에 대해서는 정의되지 않아요(undefined).

isSigned :: a -> Bool

인자가 부호 있는 타입이면 True를 돌려줘요. 인자의 실제 값은 무시돼요.

shiftL :: a -> Int -> a

인자를 지정된 비트 수(음수가 아니어야 함)만큼 왼쪽으로 시프트해요. 인스턴스는 이 함수와 shiftR 또는 통합된 shift 중 하나를 정의할 수 있어요.

shiftR :: a -> Int -> a

첫 번째 인자를 지정된 비트 수(음수가 아니어야 함)만큼 오른쪽으로 시프트해요. 오른쪽 시프트는 부호 있는 숫자 타입에 대해 부호 확장을 수행해요. 즉, x가 음수이면 상위 비트를 1로 채우고, 그렇지 않으면 0으로 채워요. 인스턴스는 이 함수와 shiftL 또는 통합된 shift 중 하나를 정의할 수 있어요.

rotateL :: a -> Int -> a

인자를 지정된 비트 수(음수가 아니어야 함)만큼 왼쪽으로 회전해요. 인스턴스는 이 함수와 rotateR 또는 통합된 rotate 중 하나를 정의할 수 있어요.

rotateR :: a -> Int -> a

인자를 지정된 비트 수(음수가 아니어야 함)만큼 오른쪽으로 회전해요. 인스턴스는 이 함수와 rotateL 또는 통합된 rotate 중 하나를 정의할 수 있어요.

instance Bits Int
instance Bits Int8
instance Bits Int16
instance Bits Int32
instance Bits Int64
instance Bits Integer
instance Bits Word
instance Bits Word8
instance Bits Word16
instance Bits Word32
instance Bits Word64
instance Bits WordPtr
instance Bits IntPtr
instance Bits CChar
instance Bits CSChar
instance Bits CUChar
instance Bits CShort
instance Bits CUShort
instance Bits CInt
instance Bits CUInt
instance Bits CLong
instance Bits CULong
instance Bits CLLong
instance Bits CULLong
instance Bits CPtrdiff
instance Bits CSize
instance Bits CWchar
instance Bits CSigAtomic
instance Bits CIntPtr
instance Bits CUIntPtr
instance Bits CIntMax
instance Bits CUIntMax

더 알아보기 (Learn more)

  • Bits 클래스의 각 메서드와 시프트·회전 동작은 부호 확장 규칙과 함께 이해하면 좋아요.
  • Data.Int·Data.Word 모듈에서 제공하는 고정 너비 정수 타입들이 이 클래스의 인스턴스가 되는 방식과도 이어져요.