問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
前問では、2 の累乗を求めるプログラムを作成しました。
では、2 の累乗がどのように 2 進数と関係しているのかを考えてみましょう。
まず、すべての非負整数は、2 進数で表すことができます。
たとえば、整数 11 は 2^3 + 2^1 + 2^0 と表すことができ、2 進数で 1011 と表すことができます。
これは、右から 3, 1, 0 番目のけたが 1 であることと対応しています。
同じように、どんな非負整数でも、必ず異なるいくつか (0 個以上) の指数を用いた 2 の累乗の和で表すことができます。
2 進数で右から i 番目のけたが 1 のとき、下から i 番目のビットが立っているといい、2^{i-1} がその 2 の累乗の和に含まれることを意味します。
では実際に、与えられた整数の 2 進数表記において、下から i 番目のビットが立っているかどうかを判定してみましょう。
整数 n, i が与えられるので、n の 2 進数表記において下から i 番目のビットが立っているかどうかを判定してください。
なお、すべての n < 2^{i-1} となる i について、i 番目のビットは 0 として扱うものとします。
n i
n の 2 進数表記において、下から i 番目のビットが立っている場合は True
、立っていない場合は False
と出力してください。
また、末尾に改行を入れ、余計な文字を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
・ 入力はすべて整数
・ 0 ≦ n < 2^20
・ 1 ≦ i ≦ 20
11 3
False
11 4
True