二进制到dec转换器的返回错误

时间:2015-10-10 04:57:47

标签: java constructor binary decimal converter

当我注意到它以某种方式发出错误的转换时,修复并整理转换器。

例如,在使用BinaryNumber bn1 = new BinaryNumber("1011");创建要转换的新号码,然后要求其使用System.out.println(bn1.convertToDecimal());给出结果时,它会输出3而不是11的正确结果。

我几乎可以肯定我的实际转换错误,但是在我的头脑中经历了我无法找到错误。

public class BinaryNumber {
    private String n;

    public BinaryNumber(String pn) {
        n = pn;
    }

    public String getN() {
        return n;
    }

    // Creating the .convertToDecimal()
    public int convertToDecimal() {
        int bitPosition = 0;
        int sum = 0;

        for (int i = n.length() - 1; i >= 0; i--) {
            sum = sum + (int) Math.pow(2, bitPosition) * (n.charAt(i) - 48);
        }
        return sum;
    }

    // Creating the .add to add the two different binary numbers after
    // converting
    public int add(BinaryNumber bn2) {
        return convertToDecimal() + bn2.convertToDecimal();
    }

    // Creating the .sub to subtract the two different binary numbers after
    // converting
    public int sub(BinaryNumber bn2) {
        return convertToDecimal() - bn2.convertToDecimal();
    }
}

2 个答案:

答案 0 :(得分:0)

您只需要增加位位置变量。

  

int bitPosition = 0;         int sum = 0;

  for (int i = n.length() - 1; i >= 0; i--) {

    sum = sum + (int) Math.pow(2, bitPosition++) * (n.charAt(i) - 48);

  }
  return sum;

答案 1 :(得分:0)

首先,Java有一个内置的二进制系统,使用原始的- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { NSMutableArray *arr = [[NSMutableArray alloc]init]; for (NSIndexPath *indexVisible in tblFeedTable.indexPathsForVisibleRows) { CGRect cellRect = [tblFeedTable rectForRowAtIndexPath:indexVisible]; BOOL isVisible = CGRectContainsRect(tblFeedTable.bounds, cellRect); if (isVisible) { [arr addObject:[NSString stringWithFormat:@"%ld",(long)indexVisible.row]]; } } NSLog(@"%@",arr); } 类型。您可以通过将int放在二进制形式的数字之前来使用它。

如果您是出于学习目的而这样做,那么这就是发生的事情: 在每次迭代中,0b的值始终为bitPosition,因为您永远不会更新它。当然,您希望每次迭代都增加它。这可以通过更改

来完成

0

Math.pow(2, bitPosition)

在变量之后使用Math.pow(2, bitPosition++)在引用后更改它。