【问题标题】:Best way to convert parts of a string to int to convert from binary to float JAVA将部分字符串转换为 int 以从二进制转换为浮点 JAVA 的最佳方法
【发布时间】:2020-03-01 05:42:49
【问题描述】:

我正在编写一个程序,其中我有 9 位“0”和“1”的字符串来转换为指数(获取每个索引并从右到左执行 2 ^ n)。

示例:["1","0","1"] = 2^2 + 0^1 + 2^0

我知道这是错误的,因为我遇到了错误,但我很困惑该怎么做才能以有效的方式计算它。

expoBefore = (strNum.charAt(9)) * 1 + (strNum.charAt(8)) * 2 + (strNum.charAt(7)) * 4 + (strNum.charAt(6)) * 8 + (strNum.charAt(5)) * 16 + (strNum.charAt(4)) * 32 + (strNum.charAt(3)) *  64 + (strNum.charAt(8)) * 128;

例如对于我正在传递的字符串之一 [11111111] 我希望它添加 1 * 2^0 + 1 * 2 ^1 + 1 * 2^2.....等

澄清编辑:

将 0 和 1 的字符串转换为整数的更有效方法是什么?

【问题讨论】:

  • 我不明白这个问题。您是在问如何将二进制字符串转换为其整数值?
  • 提示:这可以通过循环来完成
  • @Tyler,如果你理解这个问题,你能帮我们大家一个忙,edit他们的问题也能帮助别人吗?
  • @FailingCoder 完成,需要同行评审

标签: java math binary formula exponent


【解决方案1】:

您正在尝试将字符的 ascii 值与整数相乘。 您必须取此字符的整数值,然后将其与另一个整数相乘。希望这会有所帮助。

String str = "111";
int x = Character.getNumericValue(str.charAt(0));
int y = Character.getNumericValue(str.charAt(1));
int z = Character.getNumericValue(str.charAt(2));

System.out.println(x + y + z);

输出: 3

【讨论】:

    【解决方案2】:

    你需要使用循环。

    遍历二进制字符串。对于每个字符,如果设置了位,则将 2^x 添加到累加器(其中 x 是位的位置),否则,添加 0。

    String binary = "11111111";
    int number = 0;
    
    for(int i = binary.length() - 1; i >= 0; i--) {
        char c = binary.charAt(i);
    
        number += Integer.parseInt(c + "") * Math.pow(2, binary.length() - i - 1);
    }
    
    System.out.println(number); // prints 255
    

    How to convert binary to decimal

    【讨论】:

      【解决方案3】:

      只需使用 for 循环并向下递增以缩小每个数字

      【讨论】:

        【解决方案4】:

        在循环中使用Math.pow(2, i) 是非常低效的。 更快地保持以前的值并每次乘以 2(代码未经测试):

        int ip = 1;
        int sum = 0;
        for ( int i = binary.length -1; i >= 0) {
           if ( binary.charAt(i) == '1' ) {
              sum += ip;
           }
           ip *= 2;
        }
        

        如果数字变大,您可能希望使用长整数。 此外,请务必检查 binary 是否仅包含零和一。

        【讨论】:

          猜你喜欢
          • 2013-01-30
          • 1970-01-01
          • 2011-11-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-10
          • 2021-10-12
          • 2014-06-21
          相关资源
          最近更新 更多