最小位程序

时间:2014-12-03 10:43:14

标签: java c++ algorithm

我是Java新手。我尝试从 Java Just in Time 中学习它。

编剧:

  

因此编程计算表示给定的位数   不同价值的数量。

程序是:

int numberOfValues = Integer.parseInt(args[0]);
int noOfBits = 0;

while (Math.pow(2, noOfBits) < numberOfValues)
  noOfBits = noOfBits + 1;

但书籍作者要求在其他版本中写这个。

编剧:

  

在此任务中,您将编写MinimumBitWidth程序的变体,它可以更有效地工作。不是在每次迭代中在循环条件中计算2的幂,而是在单独的变量中,您的版本将累积2到noOfBits的幂。这可以通过将新变量初始化为1来完成,并在每次增加noOfBits时简单地将其值加倍。

     

您将使用与之前版本的程序相同的测试数据。

也许是因为英语不好我不明白他的意思。感谢帮助。 :)

1 个答案:

答案 0 :(得分:1)

这意味着将数字与2 0 ,2 1 ,... 2 31 进行比较。 当2 31 大于Integer.MAX_VALUE时,可能会使用long。

int noOfBits = 0;
long pow2 = 1;
while (numberOfValues >= pow2) {
    ++noOfBits;
    //pow2 = 2 * pow2
    //pow2 += pow2;
    //pow2 *= 2;
    pow2 <<= 1; // Shift left once.
}

另请参阅Integer.numberOfLeadingZeros(int),这会将代码缩减为单行。

int noOfBits = 32 - Integer.numberOfLeadingZeros(numberOfValues);