我是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
时简单地将其值加倍。您将使用与之前版本的程序相同的测试数据。
也许是因为英语不好我不明白他的意思。感谢帮助。 :)
答案 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);