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特有の手続きを以下に説明します。
[SRFI-60]{srfi.60
}
bitwise-if
と同じです(scheme.bitwise
- R7RSビット演算参照)。
[SRFI-60]{srfi.60
}
組み込みのlogtest
と同じです (基本的なビット演算参照)。
SRFI-151ではany-bit-set?
と呼ばれています
(scheme.bitwise
- R7RSビット演算参照)。
[SRFI-60]{srfi.60
}
これはこのsrfiのfirst-set-bit
の別名で、first-set-bit
の方は
SRFI-151で提供されています(scheme.bitwise
- R7RSビット演算参照)。
また、Gaucheの組み込みであるtwos-exponent-factor
とも同じです
(基本的なビット演算参照)。
[SRFI-60]{srfi.60
}
SRFI-151のbit-field-rotate
と同じです(scheme.bitwise
- R7RSビット演算参照)。
[SRFI-60]{srfi.60
}
SRFI-151のbit-field-reverse
と同じです(scheme.bitwise
- R7RSビット演算参照)。
[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ビット演算参照)。
[SRFI-60]{srfi.60
}
論理値のリストを取り、#t
を1
、#f
を0
と解釈して、
各ビットからなる整数を返します。nを非負整数とすると、
(eqv? (list->integer (integer->list n)) n)
が成り立ちます。
(list->integer '(#f #t #f #t #f)) ⇒ 10
SRFI-151のlist->bits
は、ビット順が逆 (LSBが最初) であることを除けば
これと同じです(scheme.bitwise
- R7RSビット演算参照)。
[SRFI-60]{srfi.60
}
≡ (list->integer (list bool …))
SRFI-151のbits
は、ビット順が逆 (LSBが最初) であることを除けば
これと同じです(scheme.bitwise
- R7RSビット演算参照)。