For Gauche 0.9.5

Next: , Previous: , Up: ライブラリモジュール - SRFI   [Contents][Index]

11.15 `srfi-60` - 整数に対するビット操作

Module: srfi-60

This srfi provides bit operations on integers, regarding them as 2’s complement representation.

Most of the functionalities in this module are already provided as builtin procedures (see ビット演算). This srfi defines popular aliases for many of those procedures, thus has better portability. There are also several additional procedures than Gauche’s builtin bitwise operations.

11.15.1 Bitwise operators

Function: lognot n
Function: bitwise-not n

Same as builtin `lognot` (see ビット演算).

Function: logand n …
Function: bitwise-and n …

Same as builtin `logand` (see ビット演算).

Function: logior n …
Function: bitwise-ior n …

Same as builtin `logior` (see ビット演算).

Function: logxor n …
Function: bitwise-xor n …

Same as builtin `logxor` (see ビット演算).

Returns integer, whose n-th bit is taken as follows: If the n-th bit of mask is 1, the n-th bit of n0; otherwise, the n-th bit of n1.

```(bitwise-if #b10101100 #b00110101 #b11001010)
⇒ #b01100110
```

Same as builtin `logtest` (see ビット演算).

11.15.2 Integer properties

Function: logcount n
Function: bit-count n

Same as builtin `logcount` (see ビット演算).

Function: integer-length n

Same as builtin `integer-length` (see ビット演算).

Function: log2-binary-factors n
Function: first-set-bit n

Returns the number of factors of two of integer n; that is, returns a maximum k such that `(expt 2 k)` divides n without a remainder. It is the same as the index of the least significant `1` in n, hence the alias `first-set-bit`.

```(log2-binary-factors 0) ⇒ -1   ; edge case
(log2-binary-factors 1) ⇒ 0
(log2-binary-factors 2) ⇒ 1
(log2-binary-factors 15) ⇒ 0
(log2-binary-factors 16) ⇒ 4
```

11.15.3 Bit within word

Function: logbit? index n
Function: bit-set? index n

Same as builtin `logbit?` (see ビット演算).

Function: copy-bit index n bit

Same as builtin `copy-bit` (see ビット演算).

11.15.4 Field of bits

Function: bit-field n start end

Same as builtin `bit-field` (see ビット演算).

Function: copy-bit-field to from start end

Same as builtin `copy-bit-field` (see ビット演算).

Function: ash n count
Function: arithmetic-shift n count

Same as builtin `ash` (see ビット演算).

Function: rotate-bit-field n count start end

Rotate the region of n between start-th bit (inclusive) and end-th bit (exclusive) by count bits.

```(rotate-bit-field #b110100100010000 -1 5 9)
⇒ 26768 ; #b110100010010000

(rotate-bit-field #b110100100010000 1 5 9)
⇒ 26672 ; #b110100000110000
```
Function: reverse-bit-field n start end

Reverse the order of bits of n between start-th bit (inclusive) and end-th bit (exclusive).

```(reverse-bit-field #b10100111 0 8)
⇒ 229 ; #b11100101
```

11.15.5 Bit as booleans

Function: integer->list n :optional len

Breaks n to each bits, representing `1` as `#t` and `0` as `#f`, LSB last, and returns a list of them. If a nonnegative integer len is given, it specifies the length of the result. If it is omitted, `(integer-length n)` is used.

```(integer->list 9)   ⇒ (#t #f #f #t)
(integer->list 9 6) ⇒ (#f #f #t #f #f #t)
```
Function: list->integer lis

Takes a list of boolean values, replaces the true value for `1` and the false value for `0`, and compose an integer regarding each value as a binary digit. If n is nonnegative integer, `(eqv? (list->integer (integer->list n)) n)` is true.

```(list->integer '(#f #t #f #f #t)) ⇒ 9
```
Function: booleans->integer bool …

`(list->integer (list bool …))`

Next: , Previous: , Up: ライブラリモジュール - SRFI   [Contents][Index]