#

Accessor LDB

Syntax:

ldb bytespec integer => byte

`(setf (`ldb bytespec place`)` new-byte`)`

Pronunciation:

['lidib] or ['liduhb] or ['el'dee'bee]

Arguments and Values:

bytespec---a byte specifier.

integer---an integer.

byte, new-byte---a non-negative integer.

Description:

ldb extracts and returns the byte of integer specified by bytespec.

ldb returns an integer in which the bits with weights 2^(s-1) through 2^0 are the same as those in integer with weights 2^(p+s-1) through 2^p, and all other bits zero; s is `(byte-size` bytespec`)` and p is `(byte-position` bytespec`)`.

setf may be used with ldb to modify a byte within the integer that is stored in a given place. The order of evaluation, when an ldb form is supplied to setf, is exactly left-to-right. The effect is to perform a dpb operation and then store the result back into the place.

Examples:

     (ldb (byte 2 1) 10) =>  1
     (setq a (list 8)) =>  (8)
     (setf (ldb (byte 2 1) (car a)) 1) =>  1
     a =>  (10)

Side Effects: None.

Affected By: None.

Exceptional Situations: None.

See Also:

byte, byte-position, byte-size, dpb

Notes:

     (logbitp j (ldb (byte s p) n))
        ==  (and (< j s) (logbitp (+ j p) n))

In general,

     (ldb (byte 0 x) y) =>  0

for all valid values of x and y.

Historically, the name ``ldb'' comes from a DEC PDP-10 assembly language instruction meaning ``load byte.''

The following X3J13 cleanup issue, not part of the specification, applies to this section:

- PUSH-EVALUATION-ORDER:FIRST-ITEM

Copyright 1996-2005, LispWorks Ltd. All rights reserved.