init commit again
This commit is contained in:
110
IBAF-cbs/Funcons-beta/Values/Composite/Bits/Bits.cbs
Normal file
110
IBAF-cbs/Funcons-beta/Values/Composite/Bits/Bits.cbs
Normal file
@@ -0,0 +1,110 @@
|
||||
### Bits and bit vectors
|
||||
|
||||
[
|
||||
Type bits
|
||||
Datatype bit-vectors
|
||||
Funcon bit-vector
|
||||
Type bytes Alias octets
|
||||
Funcon bit-vector-not
|
||||
Funcon bit-vector-and
|
||||
Funcon bit-vector-or
|
||||
Funcon bit-vector-xor
|
||||
Funcon bit-vector-shift-left
|
||||
Funcon bit-vector-logical-shift-right
|
||||
Funcon bit-vector-arithmetic-shift-right
|
||||
Funcon integer-to-bit-vector
|
||||
Funcon bit-vector-to-integer
|
||||
Funcon bit-vector-to-natural
|
||||
Funcon unsigned-bit-vector-maximum
|
||||
Funcon signed-bit-vector-maximum
|
||||
Funcon signed-bit-vector-minimum
|
||||
Funcon is-in-signed-bit-vector
|
||||
Funcon is-in-unsigned-bit-vector
|
||||
]
|
||||
|
||||
|
||||
#### Bits
|
||||
|
||||
Type
|
||||
bits ~> booleans
|
||||
/*
|
||||
`false` represents the absence of a bit, `true` its presence.
|
||||
*/
|
||||
|
||||
|
||||
#### Bit vectors
|
||||
|
||||
Datatype
|
||||
bit-vectors(N:natural-numbers) ::= bit-vector(_:bits^N)
|
||||
|
||||
Type
|
||||
bytes ~> bit-vectors(8)
|
||||
Alias
|
||||
octets = bytes
|
||||
|
||||
Meta-variables
|
||||
BT <: bit-vectors(_)
|
||||
|
||||
Built-in Funcon
|
||||
bit-vector-not(_:BT) : =>BT
|
||||
Built-in Funcon
|
||||
bit-vector-and(_:BT, _:BT) : =>BT
|
||||
Built-in Funcon
|
||||
bit-vector-or(_:BT, _:BT) : =>BT
|
||||
Built-in Funcon
|
||||
bit-vector-xor(_:BT, _:BT) : =>BT
|
||||
/*
|
||||
The above four funcons are the natural extensions of funcons from `booleans`
|
||||
to `bit-vectors(N)` of the same length.
|
||||
*/
|
||||
|
||||
Built-in Funcon
|
||||
bit-vector-shift-left(_:BT, _:natural-numbers) : BT
|
||||
Built-in Funcon
|
||||
bit-vector-logical-shift-right(_:BT, _:natural-numbers) : BT
|
||||
Built-in Funcon
|
||||
bit-vector-arithmetic-shift-right(_:BT, _:natural-numbers) : BT
|
||||
|
||||
Built-in Funcon
|
||||
integer-to-bit-vector(_:integers, N:natural-numbers) : bit-vectors(N)
|
||||
/*
|
||||
`integer-to-bit-vector(M, N)` converts an integer `M` to a bit-vector of
|
||||
length `N`, using Two's Complement representation. If the integer is out of
|
||||
range of the representation, it will wrap around (modulo 2^N).
|
||||
*/
|
||||
|
||||
Built-in Funcon
|
||||
bit-vector-to-integer(_:BT) : =>integers
|
||||
/*
|
||||
`bit-vector-to-integer(B)` interprets a bit-vector `BV` as an integer
|
||||
in Two's Complement representation.
|
||||
*/
|
||||
|
||||
Built-in Funcon
|
||||
bit-vector-to-natural(_:BT) : =>natural-numbers
|
||||
/*
|
||||
`bit-vector-to-natural(BV)` interprets a bit-vector `BV` as a natural number
|
||||
in unsigned representation.
|
||||
*/
|
||||
|
||||
Funcon
|
||||
unsigned-bit-vector-maximum(N:natural-numbers) : =>natural-numbers
|
||||
~> integer-subtract(integer-power(2, N), 1)
|
||||
|
||||
Funcon
|
||||
signed-bit-vector-maximum(N:natural-numbers) : =>integers
|
||||
~> integer-subtract(integer-power(2, integer-subtract(N, 1)), 1)
|
||||
|
||||
Funcon
|
||||
signed-bit-vector-minimum(N:natural-numbers) : =>integers
|
||||
~> integer-negate(integer-power(2, integer-subtract(N, 1)))
|
||||
|
||||
Funcon
|
||||
is-in-signed-bit-vector(M:integers, N:natural-numbers) : =>booleans
|
||||
~> and(integer-is-less-or-equal(M, signed-bit-vector-maximum(N)),
|
||||
integer-is-greater-or-equal(M, signed-bit-vector-minimum(N)))
|
||||
|
||||
Funcon
|
||||
is-in-unsigned-bit-vector(M:integers, N:natural-numbers) : =>booleans
|
||||
~> and(integer-is-less-or-equal(M, unsigned-bit-vector-maximum(N)),
|
||||
integer-is-greater-or-equal(M, 0))
|
||||
Reference in New Issue
Block a user