instance method Integer#[]

self[nth] -> Integer[permalink][rdoc][edit]
self[nth, len] -> Integer
self[range] -> Integer

nth 番目のビット(最下位ビット(LSB)が 0 番目)が立っている時 1 を、そうでなければ 0 を返します。

[PARAM] nth:
何ビット目を指すかの数値
[PARAM] len:
何ビット分を返すか
[PARAM] range:
返すビットの範囲
[RETURN]
self[nth] は 1 か 0
[RETURN]
self[i, len] は (n >> i) & ((1 << len) - 1) と同じ
[RETURN]
self[i..j] は (n >> i) & ((1 << (j - i + 1)) - 1) と同じ
[RETURN]
self[i...j] は (n >> i) & ((1 << (j - i)) - 1) と同じ
[RETURN]
self[i..] は (n >> i) と同じ
[RETURN]
self[..j] は n & ((1 << (j + 1)) - 1) が 0 なら 0
[RETURN]
self[...j] は n & ((1 << j) - 1) が 0 なら 0
[EXCEPTION] ArgumentError:
self[..j] で n & ((1 << (j + 1)) - 1) が 0 以外のとき
[EXCEPTION] ArgumentError:
self[...j] で n & ((1 << j) - 1) が 0 以外のとき

a = 0b11001100101010
30.downto(0) {|n| print a[n] }
# => 0000000000000000011001100101010

a = 9**15
50.downto(0) {|n| print a[n] }
# => 000101110110100000111000011110010100111100010111001

n[i] は (n >> i) & 1 と等価なので、負のインデックスは常に 0 を返します。


p 255[-1] # => 0
複数ビットの例

0b01001101[2, 4]  #=> 0b0011
0b01001100[2..5]  #=> 0b0011
0b01001100[2...6] #=> 0b0011
#   ^^^^

self[nth]=bit (つまりビットの修正) がないのは、Numeric 関連クラスが immutable であるためです。