• 締切済み

10進の自然数を2進数に変換するプログラム

10進の自然数を2進数に変換するプログラム(java)を教えてください 整数型の変数aから第bビット目(最初を下位ビットとして第0ビットとする)を取り出すメソッドを作成して、プログラムを組みたいのですが、やり方がいまいちわかりません。 どなたかわかる方よろしくお願いします!

  • Java
  • 回答数3
  • ありがとう数0

みんなの回答

  • utun01
  • ベストアンサー率40% (110/270)
回答No.3

アルゴリズムの勉強の話なのか実際のプログラミングの話なのかに拠りますが、 ans = Integer.toBinaryString(a).substring(b-1,b); でいいんじゃないでしょうか。 そういう話でなかったら無視してやってください。

cgfrr0121
質問者

補足

現在アルゴリズムの勉強中でこの問題で詰まっています><

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

常套手段は以下の2つでしょう。 ・bビット目のみ1の整数とaのビット毎の論理積(and)を計算 = 「1」をbビット左へシフトしたものと、aとのビット毎の論理積を計算 ・aをbビット右にシフトし、「1」とのビット毎の論理積を計算 メソッドの作り方自体は説明しませんがよろしいですね?

  • chie65535
  • ベストアンサー率43% (8523/19372)
回答No.1

「2で割った余り」は求められますか? 「整数型を2で割った整数型の答え」は求められますか? 同じ事を指定の回数だけ繰り返すループ文は書けますか? それが書けるならプログラムを組めます。 変数aの最下位ビットを「ビット0」、最上位ビットを「ビット31」とすると、bビット目の値は aをb回2で割って、答えを2で割った余り が、bビット目の値になります。 bが0の場合「aをb回2で割って」は「何もしない」ことになります。 なお、2で割ってる最中に答えが0になった場合は「bビット目は0」だと決まるので、途中で止めても構いません。

関連するQ&A

  • 10進の自然数を2進数に変換するプログラム(jav

    整数型の変数aから第bビット目(最初を下位ビットとして第0ビットとする)を取り出すメソッドを作成して、プログラムを組みたいのですが、やり方がいまいちわかりません。 どなたかわかる方よろしくお願いします!

  • アルゴリズム

    教えてください。 フローチャート作成 入力された10進の自然数xを2進数yに変換し出力するプログラムのフローチャートをサブルーチンも含めて全て書け。ただし、整数型の変数aから第iビット目(最初を下位ビットとして第0ビットとせよ)を取り出す整数型関数(メソッド)get_bit( a,i )を作成すること。 プログラム作成 上で設計したプログラムを作成する。 実行結果 上で作成したプログラムの実行し、その実行結果を示す。

  • フローチャートお願いします!!!!!

    問題1 入力された10進数の自然数Xを2進数yに変換し出力するプログラムのフローチャートをサブルーチンを含めてすべてかけ。しかし、整数型の変数aから第iビット目(最初を下位ビットとして第0ビットとせよ)を取り出す整数型関数(メソッド)get_bit(a,i)を作成すること。 これのプログラムの作成ができません。お願いします。returna&(1<<n)を使えば大丈夫と思いますが、なかなかうまくできません。JAVAで簡単にわかりやすくすべて書いてください。 問題2 キーボードから自然数nを入力し、1からNまでの和を求め、出力するプログラムのフローチャートをサブルーチンも含めてかけという問題です。これもJAVAでお願いします。

  • 自然数は減法について閉じている?

    数学の勉強をしていて教材に下記のように書いてあったので疑問に思いました。 A.自然数は加法と乗法について閉じている。 B.整数は加法、減法、乗法について閉じている。 整数全体についてBが言えるならば、整数の一部である自然数も加法、減法、乗法について閉じていると言えるのではないでしょうか。 しかし、現実にはAが正しく減法については閉じていません。 それともBを厳密に言うと「整数は加法、減法、乗法について閉じている。ただし整数が自然数の場合はこの限りでない。」ということなのでしょうか。 よろしくお願いいたします。

  • C言語 10進数→2進数

    キーボードで入力された1以上の正の整数n(1~15)を2進数(4bit)で出力するプログラムを作りたいんですが、 出力例に書かれている内容、 -出力例- 正の整数:12 整数 12 を2進数表記すると下位bitより 0011 となります。 ---- 上記の下位bit、というのはどういう意味でしょうか? また、この下位bitというものをどうやってプログラム上で 表記すればいいのでしょうか? 教えてください。

  • 3進数を10進数に変換

    3進数や5進数のように2の階乗ではない任意の進数の文字列を、C言語のビットシフトを使って10進数に変換するプログラムについて、質問させていただきます。 ビットシフトを使わないで、任意の進数の文字列を10進数に変換する方法は分かっていますが、ビットシフトを使った方が非常に計算が高速で出来るので、ビットシフトを使いたいと思っています。 下記のプログラムは4進文字列を10進整数に変換するものです。2進、8進文字列の場合は、シフトするビット数を1ビット、3ビット(つまり、ans <<= 1、ans <<= 3)にすれば計算することが可能です。しかし、3進数や5進数の場合、いろいろと考えたのですが、どのようにすれば良いのか分かりません。 下記のプログラムのようにビットシフトを使って3進数や5進数の文字列を10進数に変換するには、どのように工夫すれば良いでしょうか? どなたかご教授をお願いいたします。 #define STRING_NUM 2 /* 文字列の長さ */ int main(void) { int i; int ans = 0; /* 10進数の整数 */ char buf[STRING_NUM]; /* 4進数の文字列 */ buf[0] = '3'; buf[1] = '1'; for ( i = 0 ; i < STRING_NUM; i++ ){ printf(" %c", buf[i]); } printf("\n"); for ( i = 0 ; i < STRING_NUM; i++ ){ if ( buf[i] == '0' ){ ans <<= 2; /* シフトするビット数 */ ans |= 0; } if ( buf[i] == '1' ){ ans <<= 2; ans |= 1; } if ( buf[i] == '2' ){ ans <<= 2; ans |= 2; } if ( buf[i] == '3' ){ ans <<= 2; ans |= 3; } } printf( "ans = %d\n", ans ); return 0; }

  • 2進数からアスキーコードへの変換についって

    趣味で電子工作を行っているものです。 picマイコンを使用して、A/D変換の結果10bitのデータを得ました。 8ビットのマイコンなので2つのレジスタに分かれてデータが格納されています。(上位2ビットと下位8ビット) この2進数のデータを10進数に変換し、一桁ごとにアスキーコードにして、シリアル通信を用いてPCに送りたいと思っています。 ここで、10bitのデータの2進数から10進数への変換。 10進数のデータを一桁ずつアスキーコードへ変換。 の2つのやり方がわかりません。 2進数のデータのままPCに送り、PCのソフト側で変換するほうが簡単なのですが、今回はPIC側で変換し、アスキーコードで送る必要があります。 プログラムに使用する言語はアセンブリです。 どなたか分かる方がいましたら教えてください。

  • 自然数と整数はどちらが多いのか

    自然数と整数はどちらが多いのか 答え:その1 自然数も整数も無限にあるので、「どちらが多いとは言えない」。 答え:その2 すべての自然数とすべての整数でペアを作っていけるので、答えは「同じ数」 答え:その3 数直線上、もしくは領域図上において、自然数の領域は整数の領域の一部であるから、「整数の方が多い」 答えを自分なりに3つ考えたのですが、この中に正解はありますか? また、ないとしたら、答えは何ですか?

  • ビット列を表示するプログラム

    C言語の問題でビット列を表示するプログラムが全くできません。 どなたか分かる人はどうか知恵を貸してください。 ユーザが整数を入力すると、その整数をINT型の変数に入れ、そのビット列を表示するプログラム。 ただ、INT型のビット数は環境によって変わる可能性があるため、sizeof()関数を利用してINT型の変数のビット数を求め、そのビット数分だけ表示する。

  • 自然数の問題

    宜しくお願いします 2けたの自然数aと3けたの自然数bについて、a:b=3:4であり、 √a+bの値が自然数となるとき、a、bの値を求めなさい。 という問題の答えは、a=84、b=112です。 √a+bの値が自然数となるので、11×11=121  12×12=144 ・・・で、 3:4になる数 かつ 7の倍数になる数を見つける方法しか 思いあたりませんでした。 どのように求めたらよいのでしょうか? 宜しくお願いします

専門家に質問してみよう