bit_flip(offset, lsb_first: true) -> selfRuby 4.1 から[permalink][rdoc][edit]bit_flip(offset, length, lsb_first: true) -> selfbit_flip(range, lsb_first: true) -> self-
0 から数えたビット位置
offsetのビットを反転してselfを返します。lengthを指定すると、offsetからlengthビット分を連続して反転します。rangeを指定すると、rangeが示すビットの範囲を反転します。指定した範囲は全体が
selfの範囲内に収まっていなければなりません。範囲がselfの末尾を超える場合は、切り詰められるのではなくIndexErrorが発生します。ビット数が 0 の範囲を指定した場合は何もしません(no-op)が、その開始位置がselfの末尾を超えている場合は、ビット数が 0 であってもIndexErrorが発生します。既定では、各バイト内のビットは最下位ビット(LSB)から最上位ビット(MSB)の順に番号が付きます。
lsb_firstにfalseを指定すると、バイトの並び順はそのままに、各バイト内のビット番号だけが最上位ビット(MSB)から最下位ビット(LSB)の順になります。- [PARAM]
offset: - 変更を開始するビットの位置を 0 から数えた整数で指定します。
- [PARAM]
length: - 変更するビット数を指定します。
- [PARAM]
range: - 変更するビットの範囲を Range オブジェクトで指定します。
- [PARAM]
lsb_first: -
バイト内のビットの番号の付け方を指定します。既定は
true(最下位ビットが 0 番目)です。falseを指定すると最上位ビットが 0 番目になります。 - [RETURN]
-
selfを返します。 - [EXCEPTION]
IndexError: -
offsetが範囲外の場合、または範囲の一部がselfの外に及ぶ場合に発生します。 - [EXCEPTION]
ArgumentError: -
lengthに負の数を指定した場合に発生します。 - [EXCEPTION]
ArgumentError: - ビット位置として表現できないほど大きい値を指定した場合に発生します。
- [EXCEPTION]
ArgumentError: -
lsb_firstにtrue、false以外を指定した場合に発生します。 - [EXCEPTION]
FrozenError: -
selfが凍結されている場合に発生します。変更するビット数が 0 の場合でも発生します。
s = "\x00".b p s.bit_flip(1) # => "\x02" p s.bit_flip(1) # => "\x00" s = "\x00\xFF".b p s.bit_flip(4, 8) # => "\xF0\xF0" s = "\x00\xFF".b p s.bit_flip(4..11) # => "\xF0\xF0"[SEE_ALSO] String#bit_set, String#bit_clear
- [PARAM]