Integer.parseIntによる負の2進数解析
Javaで2進数文字列をint値にしたいと思ったら、Integer#parseInt(s, 2) をすればよいのだろうな
public class Test { public static void main(String[] args) { String s = "10000000000000000000000000000000"; // 32 length characters int i = Integer.parseInt(s, 2); // NumberFormatException } }
public class Test { public static void main(String[] args) { String s = "-10000000000000000000000000000000"; // 33 length characters int i = Integer.parseInt(s, 2); System.out.println(Integer.MIN_VALUE == i); // true } }
たいしたもんだ
こんなやり方は間違えるに決まっている
間違えない方がおかしい
やや面倒だが、以下の自前実装の方がいくぶんマシに思える
public class Test { public static void main(String[] args) { String s = "10000000000000000000000000000000"; int i = bin2Int(s); System.out.println(Integer.MIN_VALUE == i); // true } private static int bin2Int(String s) { if (32 < s.length() || 0 == s.length()) { throw new NumberFormatException(); } int i = 0; for (char c : s.toCharArray()) { i <<= 1; switch (c) { case '0': break; case '1': i |= 1; break; default: throw new NumberFormatException(); } } return i; } }