| bitwise-copy-bit(3scm) | Scheme Programmer's Manual | bitwise-copy-bit(3scm) |
NAME
bitwise-copy-bit, fxcopy-bit - copy a bit from an integer onto another integer
LIBRARY
(import (rnrs)) ;R6RS (import (rnrs arithmetic bitwise)) ;R6RS (import (rnrs arithmetic fixnums)) ;R6RS
SYNOPSIS
(bitwise-copy-bit n k bit) (fxcopy-bit n k bit)
DESCRIPTION
Returns the result of replacing the k th bit of n by bit.
IMPLEMENTATION NOTES
The following are reference implementations from R6RS.
;; bitwise-copy-bit
(let ((mask (bitwise-arithmetic-shift-left 1 k)))
(bitwise-if mask
(bitwise-arithmetic-shift-left bit k)
n))
;; fxcopy-bit
(let ((mask (fxarithmetic-shift-left 1 k)))
(fxif mask
(fxarithmetic-shift-left bit k)
n))
RETURN VALUES
Returns a single value; an exact integer.
EXAMPLES
(bitwise-copy-bit 0 10 1) => 1024 (bitwise-copy-bit #x8000 0 1) => #x8001 (bitwise-copy-bit #x8001 15 0) => #x0001
COMPATIBILITY
These procedures are unique to R6RS. Similar procedures can be found in SRFI-60 and SRFI-151.
ERRORS
This procedure can raise exceptions with the following condition types:
- &assertion (R6RS)
- The wrong number of arguments was passed or an argument was outside its domain. In particular, k must be non-negative, and bit must be either 0 or 1. The fixnum variant further requires that n is a fixnum and that k is non-negative and less than (fixnum-width)-1.
SEE ALSO
bitwise-if(3scm), bitwise-bit-set?(3scm)
STANDARDS
R6RS
HISTORY
These procedures first appeared in R6RS. There was previously a similar procedure in SRFI-60, copy-bit.
AUTHORS
This page is part of the scheme-manpages project. It includes materials from the RnRS documents. More information can be found at https://weinholt.se/scheme/manpages/.
BUGS
If k is very large then an implementation might try to allocate an excessive amount of memory. In normal implementations it is expected that all practical values of k are fixnums.
| 2023-02-12 |