当我注意到它以某种方式发出错误的转换时,修复并整理转换器。
例如,在使用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();
}
}
答案 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++)
在引用后更改它。