質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

6回答

5831閲覧

java 2進数変換

mikan22222

総合スコア4

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2020/07/16 10:23

問題

0〜65535の整数値を入力させ、入力値を16桁の2進数に変換して表示するプログラムを作成せよ。

書いたコード

java

1 private static void question56() { 2 3 final int i = 127; 4 final String bin = Integer.toBinaryString(i); 5 6 System.out.println(String.format("%016d", i)); 7 }

出力したい答え

0000000001111111

javaを勉強中で、問題を解いていたところ
2進数に変換後、0埋めをして出力させようと思ったのですが、
引数型 'String' は書式指定子 '%016d' の型と一致しません
とエラーがでてしまい、詰まってしまいました。

そもそもやり方が間違っているのか、アドバイスよければお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2020/07/16 11:27

エラーとコードが合ってません
guest

回答6

0

java

1public class binbin { 2 public static void main(String[] args) { 3 for (int i = 0; i <= 0xffff; i++) 4 System.out.printf("%016d\n", Long.parseLong(Integer.toBinaryString(i))); 5 } 6}

あん2

java

1import java.math.BigDecimal; 2public class binbin2 { 3 public static void main(String[] args) { 4 final int limit = 65535; 5 final BigDecimal template = new BigDecimal(Integer.toBinaryString(limit + 1)); 6 for (int i = 0; i <= limit; i++) 7 System.out.println((template.add(new BigDecimal(Integer.toBinaryString(i)))).toString().substring(1)); 8 } 9}

投稿2020/07/18 14:33

編集2020/07/19 02:34
shiketa

総合スコア4061

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mikan22222

2020/07/21 07:17

ありがとうございました!
guest

0

String bin = Integer.toBinaryString(127); System.out.println(String.format("%16s", bin).replaceAll(" ", "0"));

大喜利状態になりつつあるけど・・

投稿2020/07/18 14:03

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/07/18 14:04

みのがしてダブってる・・・
mikan22222

2020/07/21 07:18

ありがとうございます!
guest

0

Java

1 public static void main(String[] args) { 2 for (int i=0;i<=0xffff;++i) System.out.println(binaryString(i)); 3 } 4 static String binaryString(final int val) { 5 return IntStream.iterate(15, x -> x-1).limit(16) 6 .mapToObj(x -> ((val & (int)Math.pow(2,x)) == 0) ? "0" : "1") 7 .collect(Collectors.joining()); 8 }

少し変えました。

Java

1 static String binaryString(final int val) { 2 return IntStream.iterate(15, x -> x - 1).limit(16) 3 .mapToObj(x -> String.valueOf((val >> x) & 1)) 4 .collect(Collectors.joining()); 5 }

再帰型。

Java

1 static String binaryString(int val) { 2 return binaryString(int val, ""); 3 } 4 static String binaryString(int val, String acc) { 5 if (acc.length() == 16) { 6 return acc; 7 } else { 8 return binaryString(val >> 1, String.valueOf(val & 1) + acc); 9 } 10 }

いくらでも遊べそうな雰囲気。他の言語でやってみることをお勧めします。

投稿2020/07/18 13:35

編集2020/07/19 20:38
xebme

総合スコア1090

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xebme

2020/07/18 13:45

よく見たらcateyeさんの回答とほぼ同じだった。
mikan22222

2020/07/21 07:18

ありがとうございます!慣れてきたら他の言語でも書いてみようと思います!
guest

0

ベストアンサー

Java

1class Test { 2 public static void main(String[] args) { 3 System.out.println(bin16(127)); 4 } 5 6 static String bin16(int n) { 7 String s = Integer.toBinaryString(n); 8 return String.format("%0"+(16-s.length())+"d%s", 0, s); 9 } 10}

追記
別解

Java

1class Test { 2 static String bin16(int n) { 3 String s = "000000000000000" + Integer.toBinaryString(n); 4 return s.substring(s.length() - 16); 5 } 6 7 public static void main(String[] args) { 8 System.out.println(bin16(127)); 9 } 10}

追記2
さらに別解

Java

1class Test { 2 static String bin16(int n) { 3 String s = ""; 4 for (int i = 16; i > 0; s += "01".charAt(n >> --i & 1)) ; 5 return s; 6 } 7 public static void main(String[] args) { 8 System.out.println(bin16(127)); 9 } 10}

for (int i = 16; i > 0; s += (char)('0'+(n >> --i & 1))) ; の方が
メソッド charAt の呼び出しが無くて速いかも。でも += は遅いでしょう。

追記3
これが一番簡単かな?

Java

1class Test { 2 static String bin16(int n) { 3 return Integer.toBinaryString(0x10000 + n).substring(1); 4 } 5 6 public static void main(String[] args) { 7 System.out.println(bin16(127)); 8 } 9}

投稿2020/07/16 14:33

編集2020/07/19 05:38
kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/07/19 02:15

最初のやつ「0XF000」以上のいれると Exception in thread "main" java.util.DuplicateFormatFlagsException: Flags = '0' なるよな・q・ += が遅いなら char[16] に放り込んで最後に new String すると結合コストがないはず
kazuma-s

2020/07/19 05:45

最初のやつ「0x8000」以上のを値を入れるとですね。バグです。すみません。 char[16] なら確かにコストが少ないですが、for文で 16回まわすのはやはり遅いでしょう。
mikan22222

2020/07/21 07:19

別解色々とありがとうございます!参考になりました!
guest

0

"%16s"で16文字のstringを先頭スペース埋めで出力できるので、その後スペースを0に置き換え。

int i = 127; String bin = Integer.toBinaryString(i); System.out.println(String.format("%16s", bin).replace(' ', '0'));

参考 https://qiita.com/Qui/items/2773bdce647cf987d5d4

投稿2020/07/16 11:40

Kaleidoscope

総合スコア257

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mikan22222

2020/07/21 07:19

ありがとうございます!
guest

0

思い付きだけなんで、もっとうまい方法が有ると思う。

java

1 public static void main(String[] args) { 2 int s = 127; 3 String str = ""; 4 for (int i = 15; i >= 0; i--) { 5 if ((s & (1 << i)) != 0) { 6 str += '1'; 7 } else { 8 str += '0'; 9 } 10 } 11 System.out.println(str); 12 }

0000000001111111

Process finished with exit code 0

投稿2020/07/16 11:19

編集2020/07/16 11:24
cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2020/07/16 11:29

Integer.toBinaryString()だと、頭の0は出力されません。また、書式の"%016d"はデシマル(10進)表示です。
mikan22222

2020/07/21 07:20

ありがとうございます!10進なのですね勘違いしてました勉強になります;;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問