For Development HEAD DRAFTSearch (procedure/syntax/module):

11.14 srfi.60 - 整数に対するビット操作

Module: srfi.60

このsrfiは、2の補数表現とみなした正確な整数に対するビット演算を提供します。 SLIBのlogicalモジュールと互換です。

より新しいSRFI-151 (scheme.bitwise - R7RSビット演算)はこのsrfiの機能を カバーし、新しい機能を加え、さらに一貫性のある名前を採用しています。 新に書くコードにはSRFI-151を使ってください。 SRFI-60は後方互換性のために残されています。

以下の手続きはGauche組み込みです。 基本的なビット演算を参照してください。

lognot           logand           logior           logxor
logtest          logcount         integer-length   logbit?
copy-bit         bit-field        copy-bit-field   ash

以下の手続きはSRFI-151で定義されています。 scheme.bitwise - R7RSビット演算を参照してください。

bitwise-not      bitwise-and      bitwise-ior      bitwise-xor
arithmetic-shift bit-count        bitwise-if       bit-set?
copy-bit         first-set-bit

SRFI-60特有の手続きを以下に説明します。

Function: bitwise-merge mask n0 n1

[SRFI-60]{srfi.60} bitwise-ifと同じです(scheme.bitwise - R7RSビット演算参照)。

Function: any-bits-set? mask n

[SRFI-60]{srfi.60} 組み込みのlogtestと同じです (基本的なビット演算参照)。 SRFI-151ではany-bit-set?と呼ばれています (scheme.bitwise - R7RSビット演算参照)。

Function: log2-binary-factors n

[SRFI-60]{srfi.60} これはこのsrfiのfirst-set-bitの別名で、first-set-bitの方は SRFI-151で提供されています(scheme.bitwise - R7RSビット演算参照)。 また、Gaucheの組み込みであるtwos-exponent-factorとも同じです (基本的なビット演算参照)。

Function: rotate-bit-field n count start end

[SRFI-60]{srfi.60} SRFI-151のbit-field-rotateと同じです(scheme.bitwise - R7RSビット演算参照)。

Function: reverse-bit-field n start end

[SRFI-60]{srfi.60} SRFI-151のbit-field-reverseと同じです(scheme.bitwise - R7RSビット演算参照)。

Function: integer->list n :optional len

[SRFI-60]{srfi.60} 整数nをビットに分割し、論理値のリストとして返します。 1であるビットが#tに、 0であるビットが#fにマップされます。MSBが最初、LSBが最後になります。 非負整数lenが与えられた場合は、それが結果の長さを指定します。 そうでなければ (integer-length n)が結果の長さになります。

(integer->list 10)   ⇒ (#t #f #t #f)
(integer->list 10 6) ⇒ (#f #f #t #f #t #f)

SRFI-151のbits->listは、ビット順が逆 (LSBが最初) であることを除けば これと同じです(scheme.bitwise - R7RSビット演算参照)。

Function: list->integer lis

[SRFI-60]{srfi.60} 論理値のリストを取り、#t1#f0と解釈して、 各ビットからなる整数を返します。nを非負整数とすると、 (eqv? (list->integer (integer->list n)) n)が成り立ちます。

(list->integer '(#f #t #f #t #f)) ⇒ 10

SRFI-151のlist->bitsは、ビット順が逆 (LSBが最初) であることを除けば これと同じです(scheme.bitwise - R7RSビット演算参照)。

Function: booleans->integer bool …

[SRFI-60]{srfi.60} ≡ (list->integer (list bool …))

SRFI-151のbitsは、ビット順が逆 (LSBが最初) であることを除けば これと同じです(scheme.bitwise - R7RSビット演算参照)。



For Development HEAD DRAFTSearch (procedure/syntax/module):
DRAFT