crow/bits.crow (source)
Functions for operating on the individual bits in nats / ints.
Bit indexes are counted from the right, so the least-siginificant digit is 0.
So, the number 5 has bits 0 and 2 set, since 5 is 2**0 + 2**2.
~ nat8(a nat8) bare
Negates every bit.
0 bits become 1 bits and vice versa.
~ nat16(a nat16) bare
~ nat32(a nat32) bare
~ nat64(a nat64) bare
& nat8(a nat8, b nat8) bare
Intersection of bits; 'and's each corresponding bit in parallel.
An output bit will be 1 iff both corresponding input bits are 1.
& nat16(a nat16, b nat16) bare
& nat32(a nat32, b nat32) bare
& nat64(a nat64, b nat64) bare
& int8(a int8, b int8) bare
& int16(a int16, b int16) bare
& int32(a int32, b int32) bare
& int64(a int64, b int64) bare
| nat8(a nat8, b nat8) bare
Union of bits; 'or's each corresponding bit in parallel.
An output bit will be 1 iff either corresponding input bit is 1.
| nat16(a nat16, b nat16) bare
| nat32(a nat32, b nat32) bare
| nat64(a nat64, b nat64) bare
| int16(a int16, b int16) bare
| int32(a int32, b int32) bare
| int64(a int64, b int64) bare
^ nat8(a nat8, b nat8) bare
Performs exclusive or of each bit in parallel.
Output bits will be 1 iff the corresponding input bits are not equal.
^ nat16(a nat16, b nat16) bare
^ nat32(a nat32, b nat32) bare
^ nat64(a nat64, b nat64) bare
^ int8(a int8, b int8) bare
^ int16(a int16, b int16) bare
^ int32(a int32, b int32) bare
^ int64(a int64, b int64) bare
<< nat8(a nat8, b nat8) bare
Shifts the bits of 'a' left by 'b' bits.
Does not rotate.
<< nat16(a nat16, b nat16) bare
<< nat32(a nat32, b nat32) bare
<< nat64(a nat64, b nat64) bare
>> nat32(a nat32, b nat32) bare
Shifts the bits of 'a' right by 'b' bits.
Does not rotate.
>> nat64(a nat64, b nat64) bare
>> int32(a int32, b int32) bare
bits-intersect bool(a int16, b int16) bare
True iff the numbers have at least one bit in common.
bits-intersect bool(a int32, b int32) bare
bits-intersect bool(a nat32, b nat32) bare
bits-intersect bool(a nat64, b nat64) bare
has-all-bits bool(a nat8, b nat8) bare
True iff for every 1 bit in b, the corresponding bit in a is also a 1.
has-all-bits bool(a nat16, b nat16) bare
has-all-bits bool(a nat32, b nat32) bare
has-all-bits bool(a nat64, b nat64) bare
nth-bit nat64(bit-index nat64)
Number with only the bit at bit-index set.
Same as 1 << bit-index.
has-bit bool(a nat64, bit-index nat64)
True if the bit at bit-index is set.
add-bit nat64(a nat64, bit-index nat64)
Sets the bit at bit-index to 1.
sub-bit nat64(a nat64, bit-index nat64)
Sets the bit at bit-index to 0.
count-ones nat64(a nat64) bare
Returns the number of 1 bits in a.
high-n-bits nat64(n nat64) bare
Number with the highest n bits set.
low-n-bits nat64(n nat64) bare
Number with the lowest n bits set.