The following table compares the names of the bitwise (aka logical) functions of Common Lisp, SRFI 33, SRFI 60, R6RS, and BitwiseCowan. SRFI 33 was never finalized, but is a comprehensive proposal. SRFI 60 (based on SLIB) is smaller but has a few procedures of its own; some of its procedures have both native (often CL) and SRFI 33 names. R6RS is a subset of SRFI 60, but all procedure names begin with a bitwise- prefix.
Function |
CL |
SRFI 33 |
SRFI 60 |
R6RS |
Cowan |
---|---|---|---|---|---|
Bitwise NOT |
lognot |
bitwise-not |
lognot, bitwise-not |
bitwise-not |
bitwise-not |
Bitwise AND (variadic) |
logand |
bitwise-and |
logand, bitwise-and |
bitwise-and |
bitwise-and |
Bitwise IOR (variadic) |
logior |
bitwise-ior |
logior, bitwise-ior |
bitwise-ior |
bitwise-ior |
Bitwise XOR (variadic) |
logxor |
bitwise-xor |
logxor, bitwise-xor |
bitwise-xor |
bitwise-xor |
Bitwise EQV (variadic) |
logeqv |
bitwise-eqv |
--- |
--- |
bitwise-xor |
Bitwise NAND (variadic) |
lognand |
bitwise-nand |
--- |
--- |
bitwise-nand |
Bitwise NOR (variadic) |
lognor |
bitwise-nor |
--- |
--- |
bitwise-nor |
Bitwise EQV (variadic) |
logeqv |
bitwise-eqv |
--- |
--- |
bitwise-xor |
Bitwise AND with NOT of first arg |
logandc1 |
bitwise-andc1 |
--- |
--- |
bitwise-andc1 |
Bitwise AND with NOT of second arg |
logandc2 |
bitwise-andc2 |
--- |
--- |
bitwise-andc2 |
Bitwise OR with NOT of first arg |
logorc1 |
bitwise-orc1 |
--- |
--- |
bitwise-orc1 |
Bitwise OR with NOT of second arg |
logorc2 |
bitwise-orc2 |
--- |
--- |
bitwise-orc2 |
Arithmetic shift |
ash |
arithmetic-shift |
ash, arithmetic-shift |
bitwise-arithmetic-shift |
arithmetic-shift |
Population count |
logcount |
bit-count |
logcount, bit-count |
bitwise-bit-count |
bit-count |
Integer length |
integer-length |
integer-length |
integer-length |
bitwise-integer-length |
integer-length |
Integer length |
integer-length |
integer-length |
integer-length |
bitwise-integer-length |
integer-length |
Mask selects source of bits |
--- |
bitwise-merge |
bitwise-if, bitwise-merge |
bitwise-if |
bitwise-if |
Test single bit |
logbitp |
bit-set? |
logbit?, bit-set? |
bitwise-bit-set? |
bit-set? |
See if any mask bits set |
logtest |
any-bits-set?†|
logtest, any-bit-set? |
--- | |
See if all mask bits set |
--- |
all-bits-set?†|
--- |
--- |
every-bit-set? |
Replace single bit |
--- |
--- |
copy-bit |
bitwise-copy-bit |
copy-bit |
Find first bit set |
--- |
first-set-bit |
log2-binary-factors, first-set-bit |
--- |
first-set-bit |
Extract bit field* |
ldb |
extract-bit-field |
bit-field |
bitwise-bit-field |
bit-field |
Test bit field* |
ldb-test |
test-bit-field?†|
--- |
--- |
--- |
Clear bit field |
mask-field |
clear-bit-field†|
--- |
--- |
--- |
Replace bit field* |
dpb |
replace-bit-field†|
copy-bit-field |
bitwise-copy-bit-field |
bit-field-replace |
Replace corresponding bit field |
deposit-field |
copy-bit-field†|
--- |
--- |
bit-field-replace-same |
Rotate bit field |
--- |
--- |
rotate-bit-field |
bitwise-rotate-bit-field |
bit-field-rotate |
Reverse bit field |
--- |
--- |
reverse-bit-field |
bitwise-reverse-bit-field |
bit-field-reverse |
Integer to boolean list |
--- |
--- |
integer->list |
--- |
integer->list |
Boolean list to integer |
--- |
--- |
list->integer |
--- |
list->integer |
Booleans to integer |
--- |
--- |
booleans->integer |
--- |
bits |
*These procedures take a byte-spec object in Common Lisp (which encodes size and position), leading size and position arguments in SRFI-33, and trailing start and end arguments in SRFI-60, R6RS (where present), and BitwiseCowan. Consequently, they are not quite compatible across specifications. Note that copy-bit-field corresponds to different procedures in SRFI 33 and SRFI 60.
†These procedures got new names in late changes to SRFI 33 that were never consummated:
any-bits-set? |
any-bit-set? |
all-bits-set? |
every-bit-set? |
test-bit-field? |
bit-field-any? |
--- |
bit-field-every? |
extract-bit-field |
bit-field-extract |
clear-bit-field |
bit-field-clear |
replace-bit-field |
bit-field-replace |
copy-bit-field |
bit-field-copy |