例えば、51(00110011)とビットインデックスを表すインデックスi(例えばi = 0、1、i = 2→0)がある場合、これらの例のように2の累乗を求める方法。申し訳ありませんが、私は数学の表記法では大したことではありませんが、サンプルの入力と出力を行うことができます。数値(ビットシーケンス)とビットインデックスが与えられた場合、次の最高位ビットを見つけるにはどうすればよいですか?
例:51、インデックス1(001100 1)与えられた場合、I 173、インデックス2を与えられた場合、関数は(10101 01)、また00010000 = 16
を返すようにしたいです、関数は00001000 = 8を返す必要があります。
私は、ビット演算を使用し、数値のサイズに基づいてループを使用しないソリューションを探しています。
EDIT:これは宿題ではありません。私は、ユーザーの選択を数値として格納するプログラムを作成しています。私はここに自分自身に挑戦しようとしている。ここで
は私が
x--;
for (int j = 0; j < 5; j++) {
x |= x >> (int) Math.pow(2, i);
}
x++;
return x;
これは32ビットの数を取り、私にかかわらず、私は、これは任意の使用であるかどうかわからないんだけど2のべき乗を返す操作を行うことができましたなけなしのです問題。私は他の誰かが類似したものを投稿していたかどうかを見てみました。これは私が見つけたもので、私がやろうとしていることに役立つかもしれないと思いました。
EDIT 2 私は、ユーザーに曜日を選択させ、その日を1つの番号で保存しています。 1日が与えられると、私はユーザが選択した翌日を探したい。数字をブール値の配列に変換することで簡単に行うことができますが、そこに他の巧妙なソリューションがあるかどうかを見たいと思っていました。私はあまりにも "宿題"のように謝った。
私は51(00110011)とインデックス1のような数字を取ると、2^1 = 001100で割って最初の2ビットを削り取ることができます。次に、プログラムで最初の1(インデックス2)。 2ビットを削り取り、次の論理1がそれ以降のインデックス2にあったので、2 ^(2 + 2)を返します。
どこの試みですか?これは宿題解決サービスではありません。 – Kon
これは宿題ではありません。私は、ユーザーの選択を数字として保存したプログラムを書いています。私はここに自分自身に挑戦しようとしている。 – sadelbrid
それでは、この問題を解決するためのあなたの試みを親切に投稿してください。何が間違っているか分からないことを理解するのを助けることができます。 – Kon