【问题标题】:Reading binary numbers from console从控制台读取二进制数
【发布时间】:2012-02-02 19:36:48
【问题描述】:

除了BigInteger之外,如何从控制台读取二进制数并将它们存储在java中。

编辑:我需要读取最多 2000 位,然后执行多个操作,例如移位、或等,我需要BigInteger以外的其他方法 我不想使用 biginteger,因为我无法轻松地在特定索引处获得一点(尽管它有 testBit(),但它对我没有用,因为我需要打印 1 或 0,所以此方法返回 true/false。再一次 if-否则是开销)。所以我想实现我自己的get方法。

【问题讨论】:

  • 解释一下你所说的“二进制”数字是什么意思,因为所有数字都是二进制的……你的意思是允许用户以二进制格式输入一个数字,比如“111 “?
  • 是的。我需要读取 1100011、1110001010101 等数字。
  • 你想如何存储它们?
  • BigInteger(和一般的java.math)是为此用例创建的,可能是您最好的解决方案。为什么你想要另一种方式,任何具体原因?

标签: java binary


【解决方案1】:
Integer.parseInt(enteredString, 2);

【讨论】:

  • 不会抛出数字格式异常吗?因为我试图解析一个字符串或长度超过 100 的字符串,所以它做到了。请检查。
  • 你最初并没有指定你需要读这么长的数字。请参阅 wmz 的答案以获取解决方案。
【解决方案2】:

好吧,也许你可以使用BitSet

    String input="1001010101010101";
    int len=input.length();
    BitSet bs=new BitSet(len);
    int i=len-1;
    for (char c:input.toCharArray()) 
          bs.set(i--, c=='1'?true:false);

支持逻辑运算,但不支持移位

编辑:我也不明白为什么不使用BigInteger,因为你没有解释它......

编辑:将代码更改为先前版本的反转位顺序,这可能会造成混淆

【讨论】:

    【解决方案3】:

    将它们读取为Strings,并使用Integer.parseInt(binaryString, 2); 将它们存储为ints。
    如果您再次想要二进制文件,只需使用Integer.toBinaryString();

    【讨论】:

    • 如果有更多的位是什么意思?
    • 是的。我试图解析一个长度超过 100 的字符串,它给了我一个 numberformatexception。
    【解决方案4】:

    可以使用Integer.parseInt(urString,2)。

    Integer.parseInt

    【讨论】:

    • 如果有大量位,例如 100 或 200 以上,这对我没有帮助。这会引发 numberformatexception
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    相关资源
    最近更新 更多