問題
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ページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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総合スコア4061
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
String bin = Integer.toBinaryString(127); System.out.println(String.format("%16s", bin).replaceAll(" ", "0"));
大喜利状態になりつつあるけど・・
投稿2020/07/18 14:03
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
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総合スコア1090
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/18 13:45
2020/07/21 07:18
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総合スコア8224
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/07/19 02:15
2020/07/19 05:45
2020/07/21 07:19
0
"%16s"で16文字のstringを先頭スペース埋めで出力できるので、その後スペースを0に置き換え。
int i = 127; String bin = Integer.toBinaryString(i); System.out.println(String.format("%16s", bin).replace(' ', '0'));
投稿2020/07/16 11:40
総合スコア257
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
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総合スコア6851
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/16 11:29
2020/07/21 07:20
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。